2009-10-29 14 views
49

पर चेतावनियां और त्रुटियां बंद करें मुझे उम्मीदवारों और चेतावनियों की उम्मीद है और उन्हें मेरी PHP फ़ाइल पर बंद करना चाहते हैं। त्रुटियाँ हैं:php/mysql

Warning: fsockopen() 

और नोटिस दिए गए हैं:

Notice: A non well formed numeric value encountered in 

मैं इस PHP स्क्रिप्ट के लिए क्रॉन उपयोग करने के लिए योजना बना रहा हूँ और कहीं भी लॉग ऑन किसी भी त्रुटि या नोटिस पाने के लिए नहीं करना चाहती।

+4

यदि आप क्रॉन द्वारा ई-मेल की गई त्रुटियों को नहीं चाहते हैं, तो आप इसके आउटपुट को '/ dev/null' पर इंगित कर सकते हैं। फिर भी, आमतौर पर त्रुटियों के कारण त्रुटियां होती हैं - संभवतः आप जानना चाहेंगे कि आपकी क्रॉन स्क्रिप्ट कब टूट जाती है! गलतियों को गलती से संभालने का प्रयास करें। – ceejayoz

+0

कहीं से संबंधित: http://stackoverflow.com/questions/4330494/preventing-warnings-from-fsockopen – trante

उत्तर

137

जब आप सुनिश्चित करें कि आपके स्क्रिप्ट पूरी तरह से काम कर रहा है, तो आप चेतावनी और इस तरह नोटिस से छुटकारा पाने के कर सकते हैं: अपने PHP स्क्रिप्ट की शुरुआत में इस लाइन रखो:

error_reporting(E_ERROR); 

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

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

अद्यतन: कैसे बजाय के रूप में टिप्पणी में सुझाव दिया उन्हें प्रदर्शित करने में त्रुटियों लॉग इन करने, बेहतर समाधान एक फ़ाइल में त्रुटियों लॉग इन करने की इतनी ही है तो आपको पहले इसे के रूप में अत्यधिक शब्द के साथ के रूप में संभव स्थापित करना चाहिए PHP डेवलपर त्रुटि संदेशों को देखता है, न कि उपयोगकर्ताओं को। एक संभावित कार्यान्वयन .htaccess फ़ाइल के माध्यम से उपयोगी है, यदि आपके पास php.ini फ़ाइल (source) तक पहुंच नहीं है।

# supress php errors 
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 
# enable PHP error logging 
php_flag log_errors on 
php_value error_log /home/path/public_html/domain/PHP_errors.log 
# prevent access to PHP error log 
<Files PHP_errors.log> 
Order allow,deny 
Deny from all 
Satisfy All 
</Files> 
+6

ऐसा मत करें। सभी त्रुटियों को दबाकर एक भयंकर विचार है। – ceejayoz

+31

आप एक मंत्र पढ़ते हुए बोल रहे हैं। इस विशिष्ट उपयोग मामले में, यह वही है जो उपयोगकर्ता चाहता है। अगर वह लॉगिंग सिस्टम मांगेगा, तो वह इसके लिए पूछेगा। – pixeline

+4

मैं दोनों सिजॉयज़ और पिक्सेललाइन से सहमत हूं। हालांकि, error_reporting (0) को केवल उत्पादन वातावरण पर सुरक्षा उपाय के रूप में सेट किया जाना चाहिए ताकि दुर्भावनापूर्ण उपयोगकर्ताओं को गंभीर जानकारी गलती से लीक न हो। त्रुटियों को अनदेखा करने के लिए error_reporting (0) का उपयोग करना खराब चीजों को जन्म देने का एक उच्च जोखिम है। मुझे पता है कि लेखक ने यही पूछा, लेकिन मैं इसके खिलाफ सुझाव दूंगा। –

2

आपके द्वारा रिपोर्ट आप php.ini में या अपनी स्क्रिप्ट के शीर्ष पर error_reporting() फ़ंक्शन का उपयोग करके की जरूरत त्रुटि का प्रकार सेट कर सकते हैं।

18

कुछ त्रुटियों को दबाने के लिए '@' प्रतीक के साथ फ़ंक्शंस तैयार करें, सभी त्रुटि रिपोर्टिंग को बंद करने के विरोध में।

अधिक जानकारी: http://php.net/manual/en/language.operators.errorcontrol.php

पीएचपी एक त्रुटि नियंत्रण ऑपरेटर का समर्थन करता है: चिह्न (@) पर। PHP में एक अभिव्यक्ति के लिए तैयार होने पर, उस अभिव्यक्ति द्वारा उत्पन्न किए जा सकने वाले किसी भी त्रुटि संदेश को अनदेखा कर दिया जाएगा।

@fsockopen();

+0

यह आम तौर पर उत्पादन में कोड के लिए एक बेहतर समाधान है, IMHO – billrichards

+1

शायद, "* शायद *", एक फ़ंक्शन के लिए, हालांकि इसके साथ आपकी स्क्रिप्ट भरना बाद में परेशानी मांग रहा है जब * कुछ * काम नहीं करता है और आपकी त्रुटि लॉग खाली है। वास्तव में जल्दी से त्रुटियों के "प्रदर्शन" को चालू और बंद करने की अनुमति देने के लिए केस/स्विच सेट करने का सबसे अच्छा तरीका है। फिर लाइव पर वे बंद हो जाते हैं, देव/परीक्षण चालू हो सकता है। किसी भी तरह से, त्रुटि लॉग फ़ाइल में लॉगिंग (लगभग) हमेशा – James

14

हमेशा परीक्षण सर्वर पर त्रुटियों को दिखाते हैं। उत्पादन सर्वर पर कभी भी त्रुटियां न दिखाएं।

यह निर्धारित करने के लिए एक स्क्रिप्ट लिखें कि पृष्ठ स्थानीय, परीक्षण या लाइव सर्वर पर है, और "स्थानीय", "परीक्षण" या "लाइव" पर $ राज्य सेट करें। तब:

if($state == "local" || $state == "testing") 
{ 
ini_set("display_errors", "1"); 
error_reporting(E_ALL & ~E_NOTICE); 
} 
else 
{ 
error_reporting(0); 
} 
2

आप किसी कारण से अपने php.ini फ़ाइल को नहीं मिल एक में stdout (display_errors) करने के लिए त्रुटियों को निष्क्रिय कर सकते हैं।निम्न पंक्ति जोड़कर किसी भी निर्देशिका में htaccess फ़ाइल: अतिरिक्त

php_flag display_errors off

, आप एक फाइल करने के लिए त्रुटि लॉगिंग जोड़ सकते हैं:

php_flag log_errors on

13

पीएचपी error_reporting संदर्भ:

// Turn off all error reporting 
error_reporting(0); 

// Report simple running errors 
error_reporting(E_ERROR | E_WARNING | E_PARSE); 

// Reporting E_NOTICE can be good too (to report uninitialized 
// variables or catch variable name misspellings ...) 
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

// Report all errors except E_NOTICE 
// This is the default value set in php.ini 
error_reporting(E_ALL^E_NOTICE); 

// Report all PHP errors (see changelog) 
error_reporting(E_ALL); 

// Report all PHP errors 
error_reporting(-1); 

// Same as error_reporting(E_ALL); 
ini_set('error_reporting', E_ALL); 
+0

की सलाह दी जाती है कि त्रुटि रिपोर्ट बंद हो जाएगी लेकिन इसकी रिपोर्ट फ़ोल्डर में लॉग फ़ाइल में संग्रहीत की जाएगी। लॉग फ़ाइलों को बनाने के लिए PHP को कैसे रोकें? tnx –

+0

@MehdiJ: PHP में त्रुटियों को लॉगिंग से रोकने के लिए ** error_log ** इस कोड को 'ini_set (' log_errors ',' off ') जोड़ें; ' –