PHP 5 सख्त मानकों की त्रुटि को अक्षम करता है


175

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

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


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

इसके अलावा आप php.ini फ़ाइल का पता लगाएं और इसे / usr / स्थानीय / php5 / lib /
yadhu

जवाबों:


185

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

# 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निर्देश को उपयोग करने के लिए कहेंगे, जिसमें आप त्रुटियां चाहते हैं।


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

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

4
यह मेरे लिए काम नहीं करता है - E_ALL और इस्तेमाल किया था ~ नीचे जवाब से नकली कोड बंदर राशिद टिप्पणी से E_STRICT
besimple

1
यह कैसे काम करता है जो मैंने अपने php.ini log_errors = On Vs ini_set ('display_errors', '0') में पाया है; क्या अंतिम एक सेट जीत है?
उतरा

@ जब आप कुछ कोड पोस्ट करते हैं तो कृपया हमें बताएं कि हम इसे कहां पेस्ट कर सकते हैं। में: मैं जहां यह डाल करने के लिए पता नहीं है php.iniया .htaccessया मेरे PHP कोड में कहीं।
मित्र रात्रि

89

बिना किसी त्रुटि के।

error_reporting(0);

या सिर्फ सख्त के लिए नहीं

error_reporting(E_ALL ^ E_STRICT);

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

error_reporting(-1);


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

10
नोट: E_STRICT php 5.4 के बाद से केवल E_ALL का हिस्सा रहा है
फ्रेड हसलाम

@FakeCodeMonkeyRashid मुझे आश्चर्य है कि ऐसा क्यों है? शायद इसलिए कि निकासी आदेश महत्वपूर्ण है?
कोडिंग डेस 18'13

PHP ini_set('error_reporting', E_ALL&~E_STRICT); में ini_set('error_reporting', E_ALL^E_STRICT);
STRICT

मैं ^बताना चाहता हूं कि ("xor") के बजाय & ~("और नहीं") का उपयोग करना एक बुरा विचार है ! ^इस धारणा पर निर्भर करता है कि E_STRICT E_ALL का हिस्सा है और हमेशा इसका हिस्सा रहेगा। यह बुरा है क्योंकि E_ALL ने अतीत में बदलाव किया (E_STRICT इसके अतीत में नहीं था, लेकिन अब PHP 5.4 के बाद से है)। यदि यह धारणा एक दिन विफल हो जाती है, ^तो न केवल टूट जाएगी, बल्कि वास्तव में इसके विपरीत है जो यह करना चाहिए था: यह X_ (कैसे ) काम करने के कारण E_STRICT को सक्षम करेगा ^& ~हालाँकि, हमेशा E_STRICT को निष्क्रिय करता है, E_ALL के वर्तमान मूल्य को कोई फर्क नहीं पड़ता। इसलिए & ~इस्तेमाल किया जाना चाहिए।
जय

31

उपरोक्त सभी उपाय सही हैं। लेकिन, जब हम एक सामान्य PHP अनुप्रयोग के बारे में बात कर रहे हैं, तो उन्हें हर पृष्ठ में शामिल करना होगा, जिसकी आवश्यकता है। इसे हल करने का एक तरीका .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 समाधान) किया - और कुछ नहीं - यहाँ तक कि .ini को संशोधित करना - चाल कर रहा था।

मैंने इसका इस्तेमाल php_admin_value error_reportingकाम करने के लिए (vhost config में) किया।
लू टेरिल्लौने

@ सेजा, इसे ठीक किया।
स्टारएक्स

1
पृष्ठ के बारे में नहीं, यह विधि पसंद की जाती है क्योंकि अधिकांश E_STRICT त्रुटियां संकलन-समय हैं और रनटाइम में ओवरराइड नहीं की जा सकती
AbiusX

2
हाय बस इसे थोड़ा आसान बनाने के लिए, जो लोग wamp का उपयोग कर रहे हैं, आप php> php सेटिंग्स >> प्रदर्शन त्रुटियों पर क्लिक करके त्रुटियों को अक्षम कर सकते हैं। अगर इसकी जाँच हो तो इसे अनचेक करें।
हेमांग रामी

9

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

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


4

वर्डप्रेस

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


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

2

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

/*
 * 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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.