2009-08-08 10 views
167

मुझे सख्त मानकों के लिए त्रुटि रिपोर्टिंग अक्षम करने के लिए शीर्ष पर मेरी PHP स्क्रिप्ट सेट अप करने की आवश्यकता है।PHP 5 सख्त मानकों को अक्षम करें

क्या कोई मदद कर सकता है?

+8

@ 451F: मुझे लगता है यहाँ कुंजी शब्द "सख्त मानकों" कर रहे हैं। मुझे पिछले संस्करणों के बारे में पता नहीं है लेकिन PHP 5.4.0 के साथ यह अनुशंसा की जाती है कि आप त्रुटि रिपोर्टिंग को 'E_ALL & ~ E_DEPRECATED और ~ E_STRICT' उत्पादन के लिए सेट करें। ध्यान दें कि वे सुझाव देते हैं कि आप सख्त मानकों को अक्षम करें। –

+0

आपको php.ini फ़ाइल का पता लगाने और इसे/usr/local/php5/lib/ – yadhu

उत्तर

177

आप त्रुटि अक्षम करना चाहते हैं रिपोर्टिंग, या सिर्फ उपयोगकर्ता को इसे देखने से रोकें? आमतौर पर उत्पादन साइट पर त्रुटियों को लॉग करना एक अच्छा विचार है।

# in your PHP code: 
ini_set('display_errors', '0');  # don't show any errors... 
error_reporting(E_ALL | E_STRICT); # ...but do log them 

वे अपने मानक सिस्टम लॉग करने के लिए लॉग इन किया जाएगा, या वास्तव में निर्दिष्ट करने के लिए error_log निर्देश का उपयोग आप जहां त्रुटियों जाना चाहते हैं।

+9

बस स्पष्ट रूप से स्पष्ट रूप से स्पष्ट करने के लिए: बेशक आप इन्हें अपनी 'php.ini' फ़ाइल में भी सेट कर सकते हैं, उदा। यदि आप PHP कोड को संशोधित नहीं कर सकते हैं। – sschuberth

+1

उत्पादन में सख्त त्रुटियों को लॉग करना भी एक बुरा अभ्यास है, हालांकि। चूंकि आप अपने लॉग को उन नोटिस के साथ भर देंगे जो संभवतः कोई फर्क नहीं पड़ता है, इनमें से एक या दोनों निम्न समस्याओं का कारण बनता है: serverAdmin त्रुटियों को याद/अनदेखा कर देगा और लॉग निर्देशिका किसी भी समय सभी सर्वर स्पेस का उपभोग करेगी। – Lance

+4

यह मेरे लिए काम नहीं करता है - – besimple

87

कोई त्रुटि नहीं के लिए।

error_reporting(0);

या सिर्फ सख्त नहीं

error_reporting(E_ALL^E_STRICT);

के लिए और अगर तुम कभी सभी त्रुटियों को फिर से प्रदर्शित करना चाहते हैं, का उपयोग

error_reporting(-1);

+0

पर कॉपी करने के लिए मेरे लिए काम नहीं करता –

+50

+1: मेरा मानना ​​है कि '^' एक प्रकार की त्रुटि को छोड़ने के लिए केवल अच्छा है। यदि आप अतिरिक्त प्रकार बंद करना चाहते हैं तो आपको 'E_ALL & ~ E_DEPRECATED और ~ E_STRICT' प्रारूप का उपयोग करना चाहिए। या शायद '(E_ALL & ~ (E_DEPRECATED | E_STRICT)) 'प्रारूप। –

+10

नोट: E_STRICT केवल e_ALL का हिस्सा रहा है क्योंकि PHP 5.4 –

9

error_reporting ध्वज का डिफ़ॉल्ट मान E_ALL & ~ E_NOTICE अगर php.ini में सेट नहीं है। लेकिन कुछ स्थापना (विशेष रूप से विकास वातावरण को लक्षित करने वाली स्थापना) में E_ALL | E_STRICTके मान के रूप में सेट करें यह ध्वज (यह विकास के दौरान अनुशंसित मूल्य है)। कुछ मामलों में, विशेष रूप से जब आप कुछ ओपन सोर्स प्रोजेक्ट्स को चलाने के लिए चाहते हैं, जिसे PHP 5.3 युग से पहले विकसित किया गया था और अभी तक आपके विकास वातावरण में PHP 5.3 द्वारा परिभाषित सर्वोत्तम प्रथाओं के साथ अपडेट नहीं किया गया है, तो आप शायद कुछ प्राप्त करने में भाग लेंगे आपके जैसे संदेश मिल रहे हैं। इस स्थिति पर निपटने का सबसे अच्छा तरीका,, झंडा error_reporting के मूल्य के रूप में केवल E_ALL स्थापित करने के लिए है या तो php.ini में या कोड (शायद में index.php की तरह एक सामने के नियंत्रक में में वेब जड़ इस प्रकार है:।

if(defined('E_STRICT')){ 
    error_reporting(E_ALL); 
} 
29

उपरोक्त सभी समाधान, सही कर रहे हैं लेकिन जब हम एक सामान्य पीएचपी आवेदन के बारे में बात कर रहे हैं, वे हर पेज में शामिल करने के लिए है, यह है कि यह आवश्यकता है इस को हल करने के लिए एक तरह से, है। रूट फ़ोल्डर पर .htaccess के माध्यम से बस त्रुटियों को छिपाने के लिए। [फ़ाइल में अनुवर्ती लाइनों में से एक रखें]

php_flag display_errors off 

या

php_value display_errors 0 

इसके बाद, रिपोर्टिंग

php_value error_reporting 30719 

आप सोच रहे हैं, तो कैसे मूल्य 30719 आया E_ALL (32767), E_STRICT (2048) त्रुटि स्थापित करने के लिए वास्तव में कर रहे स्थिर जो संख्यात्मक मान रखता है और (32767 - 2048 = 30719)

+2

बहुत बहुत धन्यवाद - इसने PHP 5.4.7 में चाल (.htaccess समाधान) किया - कुछ भी नहीं - यहां तक ​​कि संशोधित भी।आईएनआई - चाल चल रहा था। – scottcarmich

+1

यह -2048 होना चाहिए, है ना? नहीं -2028। – Seza

+0

मैंने काम करने के लिए 'php_admin_value error_reporting' का उपयोग किया (vhost config में)। –

7

PHP में।आरं सेट:

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT 
4

वर्डप्रेस

आप वर्डप्रेस वातावरण में काम करते हैं, तो Wordpress फ़ाइल में त्रुटि स्तर सेट WP-शामिल समारोह wp_debug_mode() में/load.php। इसलिए इस फ़ंक्शन को कॉल करने के बाद आपको स्तर को बदलना होगा (फ़ाइल में गिट में चेक नहीं किया गया है, इसलिए केवल विकास है), या या तो सीधे error_reporting() कॉल

+0

यह वास्तव में उपयोगी है, मैंने एक वर्डप्रेस इंस्टॉल के लिए डीबग मोड किया था और यह नहीं पता था कि यह ऐसा करता है। जानकारी के लिए धन्यवाद! – Tim

1

मुझे कोई ऐसा उत्तर नहीं मिला जो साफ़ और उपयुक्त है उत्पादन के लिए तैयार सॉफ्टवेयर, इसलिए यहाँ यह जाता है:

/* 
* Get current error_reporting value, 
* so that we don't lose preferences set in php.ini and .htaccess 
* and accidently reenable message types disabled in those. 
* 
* If you want to disable e.g. E_STRICT on a global level, 
* use php.ini (or .htaccess for folder-level) 
*/ 
$old_error_reporting = error_reporting(); 

/* 
* Disable E_STRICT on top of current error_reporting. 
* 
* Note: do NOT use^for disabling error message types, 
* as^will re-ENABLE the message type if it happens to be disabled already! 
*/ 
error_reporting($old_error_reporting & ~E_STRICT); 


// code that should not emit E_STRICT messages goes here 


/* 
* Optional, depending on if/what code comes after. 
* Restore old settings. 
*/ 
error_reporting($old_error_reporting); 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^