PHP 5.4 में सख्त मानकों को अक्षम करना


95

मैं वर्तमान में php 5.4 पर एक साइट चला रहा हूं, इससे पहले मैं 5.3.8 पर अपनी साइट चला रहा था। दुर्भाग्य से, php 5.4 संयोजन E_ALLऔर E_STRICT, जिसका अर्थ है कि मेरी पिछली सेटिंग error_reportingअब काम नहीं करती है। मेरा पिछला मूल्य E_ALL & ~E_NOTICE & ~E_STRICTक्या मुझे एक समय में एक मान को सक्षम करना चाहिए था ?

मेरे पास अभी तक बहुत सारी त्रुटियां हैं और फ़ाइलों को ठीक करने के लिए मेरे पास बहुत अधिक कोड हैं।


11
सलाह ... कोड को ठीक करें या बग को डिबग करने के लिए बेहतर और अधिक कठिन होगा
बाबा

7
एस / दुर्भाग्य / सौभाग्य से
NikiC

96
सलाह के लिए धन्यवाद, हालांकि मुझे पूरे jfusion phpbb3 प्लगइन को फिर से लिखने के लिए ज्ञान की आवश्यकता नहीं है। हालांकि कृपालु होने के लिए धन्यवाद।
इकोम्रेड

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

7
यह एक पूरी तरह से उचित प्रश्न है, और हाँ @ कॉमरेड - आप यहाँ कृपालु और व्यंग्य के बारे में सही हैं। यह StackOverflow के कम आकर्षक लक्षणों में से एक है। उस सभी ने कहा, मैं आपको सलाह देता हूं कि आप कम से कम कुछ चेतावनियों से निपटें - भले ही आप उन सभी को नहीं कर सकते।
रोकें

जवाबों:


139

जैसा कि टिप्पणीकारों ने कहा है कि त्रुटियों को ठीक करने के लिए सबसे अच्छा विकल्प है, लेकिन सीमित समय या ज्ञान के साथ, यह हमेशा संभव नहीं है। अपने php.ini परिवर्तन में

error_reporting = E_ALL

सेवा

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

यदि आपके पास php.ini तक पहुंच नहीं है, तो आप संभावित रूप से इसे अपनी .htaccess फ़ाइल में डाल सकते हैं:

php_value error_reporting 30711

यह E_ALL मान (32767) और E_STRICT (2048) और E_NOTICE (8) मान को हटाने वाला है।

यदि आपके पास .htaccess फ़ाइल तक पहुंच नहीं है या यह सक्षम नहीं है, तो आपको संभवतः इसे किसी भी स्क्रिप्ट के PHP अनुभाग के शीर्ष पर रखना होगा, जो ब्राउज़र कॉल से लोड हो जाता है:

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

उनमें से एक को सॉफ्टवेयर का उपयोग करने में सक्षम होने में आपकी मदद करनी चाहिए। नोटिस और सख्त सामान हालांकि समस्याओं या संभावित समस्याओं के संकेतक हैं और आप पा सकते हैं कि कुछ कोड PHP 5.4 में सही तरीके से काम नहीं कर रहे हैं।


11
मैं php 5.4.5 का उपयोग कर रहा हूं और मैंने उपरोक्त सभी की कोशिश की, लेकिन मैं सख्त सूचनाओं को निष्क्रिय नहीं कर सका :( कोई अन्य विचार?
ro ko

2
आप error_reporting () में अन्य भागों के साथ डालने और ~ E_DEPRECATED को आज़मा सकते हैं। क्या संदेश देख रहे हैं?
डेविड स्टॉकटन

4
@roko क्या यह संभव है कि आपका कोड इसे कहीं ओवरराइड कर रहा है? मुझे php.ini में इसे अक्षम करने के बाद भी सख्त त्रुटियां दिखाई दे रही थीं, तब मुझे एहसास हुआ कि यह केवल कुछ वेबसाइटों के लिए था, जो ड्रुपल का उपयोग कर रहे थे, जहां मूल्य कोड में सेट किया जा रहा था
andrewtweber

1
@AndrewSpear यह अजीब है। सिद्धांत रूप में error_reporting सेटिंग को उन त्रुटियों को प्रभावित करना चाहिए जो कहीं भी दिखाए गए हैं। Display_errors सेटिंग को प्रभावित करना चाहिए कि आपको आउटपुट (PHP पृष्ठों में) में त्रुटियां मिलती हैं या नहीं और error_log को प्रभावित करेगा जहां त्रुटियों को लॉग में लिखा जाता है। अगर Display_errors चालू है, तो आपको स्क्रीन पर लॉग की तरह ही त्रुटियां दिखनी चाहिए।
डेविड स्टॉकटन

4
एक StackOverflow Smuglord ™ में बदल के बिना एक साधारण प्रश्न के साथ एक सरल प्रश्न का उत्तर देने के लिए +1।
जोशुआ पेच

2

.htaccess php_value केवल तभी काम कर रहा है जब आप PHP सर्वर एपीआई को वेब सर्वर अपाचे के मॉड्यूल के रूप में उपयोग करते हैं। IfModule सिंटैक्स का उपयोग करें:

# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
    php_value error_reporting 30711
</IfModule>

यदि आप PHP Server API CGI / FastCGI का उपयोग करते हैं

ini_set('error_reporting', 30711);

या

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

अपने PHP कोड, या PHP विन्यास फाइल में .user.ini | php.ini संशोधन:

error_reporting = E_ALL & ~E_STRICT & ~E_NOTICE

अपने वर्चुअल होस्ट, सर्वर स्तर पर।


1

मेरे लिए यह तब काम आया, जब मैंने

PHP कोड में कहीं पर एक ही समय में दो स्थानों पर error_reporting सेट किया

ini_set('error_reporting', 30711);


और .htaccess फ़ाइल

php_value error_reporting 30711

केवल एक चीज जो php.ini तक पहुंच के बिना मेरे लिए काम करती है, उपरोक्त में से एक अपने आप से काम नहीं करेगी, केवल 500 त्रुटि लौटा दी। दोनों एक साथ बच्चे !!!
जेमी हटबर

1

यदि आपको E_DEPRACATED को भी अक्षम करना है, तो उपयोग करें:

php_value error_reporting 22527

मेरे मामले में CMS मेड सिंपल शिकायत कर रहा था कि "E_STRICT को error_reporting में सक्षम किया गया है" और साथ ही "E_DEPRECATED को सक्षम किया गया है"। उस एक पंक्ति को .htaccess में जोड़कर दोनों गलतफहमियों को हल किया।


0

सिर ऊपर है, तो आपको LAMP, Apache या जो कुछ भी आपके इस प्रभाव को प्रभावित करने के लिए उपयोग करना है, उसे पुनः आरंभ करने की आवश्यकता हो सकती है। इस पर थोड़ी देर के लिए हमारे दिमाग को रोक दिया, लगता है जब तक सेवाओं को फिर से शुरू नहीं किया जाता, तब तक कोई असर नहीं पड़ता, क्योंकि वेबसाइट कैशिंग थी।


नहीं। ऐसा इसलिए है क्योंकि अपाचे को PHP के लिए सेटिंग्स को फिर से लोड करने की आवश्यकता है। यह AFAIK केवल तब किया जाता है जब सेवा शुरू होती है।
svin83
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.