PHP में चेतावनी संदेश निकालें


228

मेरा कुछ PHP कोड है। जब मैं इसे चलाता हूं, तो एक चेतावनी संदेश दिखाई देता है।

मैं इन चेतावनी संदेशों को कैसे हटा / दबा / अनदेखा कर सकता हूँ?


इसे भी देखें: stackoverflow.com/questions/1087365
dreftymac

जवाबों:


349

आपको वास्तव में चेतावनी के कारण कुछ भी ठीक करना चाहिए, लेकिन आप त्रुटियों की दृश्यता को नियंत्रित कर सकते हैं error_reporting()। चेतावनी संदेशों को छोड़ने के लिए, आप कुछ का उपयोग कर सकते हैं:

error_reporting(E_ERROR | E_PARSE);

53
E_ALL ^ E_WARNING, चेतावनी के अलावा सभी त्रुटि रिपोर्टिंग को सक्षम करने के लिए, तर्क का एक बेहतर विकल्प की तरह लगता है error_reporting
मार्क अमेरी

1
आम तौर पर मैं सहमत हूं, मेरे मामले में चेतावनी संदेश उत्पन्न करना व्यवहार का उद्देश्य था क्योंकि यह मेरी इकाई परीक्षणों का हिस्सा था।
pgee70

120

आप सभी त्रुटि संदेशों को दबाने के लिए अपने फ़ंक्शन कॉल के सामने एक @ डाल सकते हैं ।

@yourFunctionHere();

4
यह सिर्फ त्रुटि को छुपाता है, यह अभी भी हो रहा है। त्रुटियां PHP को धीमा कर देती हैं इसलिए यदि संभव हो तो त्रुटि को ठीक करना सबसे अच्छा है। जब कोई त्रुटि न हो तो @ का उपयोग करना भी कोड को धीमा कर देता है। vega.rd.no/articles/php-performance-error-suppression
dprevite

46
कभी-कभी (दुर्भाग्य से) आपके पास वास्तव में कोई विकल्प नहीं होता है। उदाहरण के लिए, PHP फ़ंक्शन parse_url () "गंभीर रूप से विकृत" URL के लिए चेतावनी उत्पन्न करता है - जो कि इस मामले में फ़ंक्शन के झूठे होने के बाद से यकीनन एक बग है। इसलिए आपको या तो अपने प्रोग्राम आउटपुट में इन PHP चेतावनियों को सहन करना चाहिए (पार्सर / सत्यापनकर्ता अनुप्रयोगों के लिए अस्वीकार्य हो सकता है), किसी भी तरह से चेतावनी को दबाएं, या URL के लिए अपना स्वयं का पार्सर / सत्यापनकर्ता लिखकर टूटे हुए PHP व्यवहार के आसपास काम करें। इस मामले में, मैं @ का चयन करता हूं।
पतरस

1
महत्वपूर्ण: इस पद्धति का उपयोग करें iff (1) आप उस समस्या को ठीक नहीं कर सकते हैं जो चेतावनी उत्पन्न करती है और न ही (2) php error_reporting के माध्यम से अंतिम उपयोगकर्ताओं से अपनी चेतावनी छिपाती है ... अपने डेवलपर्स से चेतावनी छिपाना कोई समाधान नहीं है।
यहोशू Kissoon

3
मुझे समझाइए कि यह क्यों महत्वपूर्ण है। जैसे कुछ कार्य dns_get_recordचेतावनी फेंक देंगे। आपका कोड चेतावनी के लिए क्षतिपूर्ति कर सकता है लेकिन यह अभी भी उन्हें फेंकता है। रिपोर्टिंग रिपोर्टिंग को बंद करना प्रोडक्शन सर्वर पर काम करता है, लेकिन डीवेल सर्वर पर नहीं। यदि आप XML सामग्री उत्पन्न कर रहे हैं, तो चेतावनी ब्राउज़र को रेंडर न करने का कारण बनेगी क्योंकि सर्वर विकृत XML को चेतावनी के कारण भेज रहा है। कभी-कभी आप चाहते हैं कि देवल पर, लेकिन अस्थायी DNS लुकअप विफलता के कारण कुछ के लिए नहीं जो आप पहले से ही क्षतिपूर्ति करते हैं।
ऐलिस वंडर

2
मुझे समझाएं कि यह क्यों उपयोगी है, जब सभी चेतावनी संदेशों के बजाय, यह आप ही हैं जो चेतावनी को एक त्रुटि के रूप में संभालना चाहते हैं और अपनी त्रुटि संदेश उत्पन्न करते हैं
डैनियल एन।

43

अन्य सभी त्रुटि रिपोर्टिंग को सक्षम करते हुए चेतावनी को दबाने के लिए:

error_reporting(E_ALL ^ E_WARNING); 


18

यदि आप अन्य सभी त्रुटियों को प्रदर्शित करते हुए चेतावनियों और कुछ अन्य त्रुटि प्रकारों (उदाहरण के लिए, नोटिस) को दबाना चाहते हैं, तो आप यह कर सकते हैं:

error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE);

15

कोर Php में आम के शीर्ष पर चेतावनी संदेश सेट error_reporting (0) छिपाने के लिए फ़ाइल या व्यक्तिगत फ़ाइल शामिल है।

Wordpress में चेतावनियाँ और नोटिस wp-config.php फ़ाइल में निम्नलिखित कोड जोड़ते हैं

ini_set('log_errors','On');
ini_set('display_errors','Off');
ini_set('error_reporting', E_ALL );
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

यह सबसे अच्छा समाधान है, जब यह वर्डप्रेस में लॉग छिपाने की बात आती है। धन्यवाद!!
नव मोरीना

10

सवाल का सही जवाब नहीं दे रहा है, लेकिन मुझे लगता है कि यह कुछ स्थितियों में बेहतर समझौता है:

तीसरे पक्ष के पुस्तकालय में एक प्रिंटफ () स्टेटमेंट के परिणामस्वरूप मेरे पास एक चेतावनी संदेश था। मुझे ठीक-ठीक पता था कि कारण क्या था - एक अस्थायी काम-के आसपास जबकि तीसरे पक्ष ने अपना कोड तय किया था। मैं इस बात से सहमत हूं कि चेतावनियों को दबाया नहीं जाना चाहिए, लेकिन मैं अपने क्लाइंट को चेतावनी संदेश के साथ स्क्रीन पर पॉपिंग संदेश के साथ अपना काम प्रदर्शित नहीं कर सका। मेरा समाधान:

printf('<div style="display:none">');
    ...Third-party stuff here...
printf('</div>');

चेतावनी अभी भी पृष्ठ स्रोत में मेरे लिए एक अनुस्मारक के रूप में थी, लेकिन क्लाइंट के लिए अदृश्य थी।


5
व्यक्तिगत रूप से, मैं ob_start()और ob_end_clean()इसके बजाय उपयोग करना चाहते हैं । इस तरह सामान ब्राउज़र पर भी नहीं भेजा जाता है (जो कि वह यहाँ करता है)।
h2ooooooo

6
इसलिए मैंने "कुछ स्थितियों", "चेतावनियों को दबाया नहीं जाना चाहिए" और "मुझे याद दिलाएं" शामिल किया।
डेववली

1
मुझे अधिक वोट देने से पहले, कृपया मेरा उत्तर पढ़ें। नोट "तृतीय-पक्ष", "समझौता" और उपरोक्त टिप्पणी। मैंने इस उत्तर को किसी अन्य स्थिति में उसी स्थिति में जोड़ा है जब मैं उस स्थिति में था, और उस विशिष्ट स्थिति में, इसने मुझे बचा लिया जबकि अन्य सभी उत्तर उतने अच्छे नहीं थे। अगली बार मैं सहायक होने के बारे में दो बार सोचूंगा।
डेववेल्ली

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

8

मैं इसे अपने रूप में निम्नानुसार करता हूं php.ini :

error_reporting = E_ALL & ~E_WARNING  & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED

यह केवल घातक त्रुटियों और चेतावनियों को लॉग करता है।


7

मुझे लगता है कि बेहतर समाधान .htaccess का कॉन्फ़िगरेशन है। इस तरह से आपको आवेदन के कोड को बदलना नहीं है। यहाँ Apache2 के निर्देश हैं

php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0

7

आप error_reporting का उपयोग करके चेतावनी को दबा सकते हैं लेकिन बेहतर तरीका यह है कि आप अपनी स्क्रिप्ट को पहले स्थान पर ठीक करें।

यदि आप नहीं जानते कि कैसे, अपने प्रश्न को संपादित करें और हमें प्रश्न में पंक्ति और प्रदर्शित होने वाली चेतावनी दिखाएं।


7
सफाली, आपको समस्याओं को ठीक करना चाहिए, फिर अनदेखा नहीं करना चाहिए।
सैम्पसन

2
सफाली, जैसा कि आप PHP में एक निश्चित रुचि रखते हैं, अपने आप को एक एहसान करो और उस स्क्रिप्ट को ठीक करने में देखो।
पेका

0

त्रुटि नियंत्रण ऑपरेटर के साथ पहले से ही उत्तर है लेकिन इसमें स्पष्टीकरण की कमी है। आप @प्रत्येक अभिव्यक्ति के साथ ऑपरेटर का उपयोग कर सकते हैं और यह त्रुटियों को छिपाता है (घातक त्रुटियों को छोड़कर)।

@$test['test']; //PHP Notice:  Undefined variable: test

@(14/0); // PHP Warning:  Division by zero

//This is not working. You can't hide Fatal Errors this way.
@customFuntion(); // PHP Fatal error:  Uncaught Error: Call to undefined function customFuntion()

डिबगिंग के लिए यह तेज़ और सही विधि है। लेकिन आपको इसे कभी भी उत्पादन पर उपयोग नहीं करना चाहिए और न ही अपने स्थानीय संस्करण में स्थायी रूप से शामिल करना चाहिए। यह आपको अत्यधिक अनावश्यक जलन देगा।

आपको इसके बजाय विचार करना चाहिए:

1. स्वीकार किए गए उत्तर में उल्लिखित सेटिंग की त्रुटि रिपोर्ट।

error_reporting(E_ERROR | E_PARSE);

या PHP INI सेटिंग्स से

ini_set('display_errors','Off');

2. अपवादों को पकड़ना

try {
    $var->method();
} catch (Error $e) {
    // Handle error
    echo $e->getMessage();
}

0

सभी चेतावनियों को अनदेखा करने के लिए, अपने कोड के शीर्ष पर इस नमूने का उपयोग करें:

error_reporting(0);

और स्वीकृत उत्तर के साथ आपके उत्तर में क्या अंतर है?
endo64
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.