मैं PHP नोटिस कैसे बंद करूँ?


126
Notice: Constant DIR_FS_CATALOG already defined

मैंने पहले ही टिप्पणी कर दी display_errorsहै php.ini, लेकिन काम नहीं कर रहा है।

मैं ब्राउज़रों में ऐसी चीजों का उत्पादन न करने के लिए PHP कैसे बनाऊं?

अपडेट करें

मैंने display_errors = Offवहाँ रखा लेकिन यह अभी भी इस तरह के नोटिस की रिपोर्ट कर रहा है,

यह PHP 5.3 के साथ एक मुद्दा है?

रिपोर्टिंग कई कॉल ढेर भी ..


3
यदि आप अपाचे का उपयोग कर रहे हैं, तो आपको अपना सर्वर पुनरारंभ करना पड़ सकता है! यदि आप XAMPP का उपयोग कर रहे हैं तो प्रबंधक एप्लिकेशन में "पुनरारंभ" चुनें।
st4wik 13

2
मैं यह grep display_errors /path/to/php.iniदेखने के लिए दौड़ रहा हूं कि क्या आपकी रेखा फ़ाइल के नीचे कहीं ओवरराइड हो रही है। मेरे साथ यही हो रहा है।
usandfriends

Error_reporting इसका समाधान है
डेविड

ini_set('display_errors',0)अपनी php फ़ाइल में प्रयास करें। जब आप आईएनआई-सेटिंग्स काम नहीं कर रहे हैं, तो आपको यह जांचना चाहिए कि क्या phpinfo()आपका वांछित मूल्य दिखाता है। यदि आपने गलत इन-फाइल नहीं बदली है या php.ini से आपके मूल्यों को अधिलेखित कर दिया है
Radon8472

यह कोई php 5.3 बग नहीं है। display_errors php 4.0.3 से नवीनतम संस्करणों @see 3v4l.org/87gIl
Radon8472

जवाबों:


78

आप फ़ंक्शन display_errorsको सेट 0या उपयोग कर सकते हैं error_reporting()

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


4
+1: मैं यह उल्लेख करने की स्वीकृति देता हूं कि उसे त्रुटियों को सुधारना चाहिए, रिपोर्टिंग को बंद नहीं करना चाहिए। और आपने इसे @ जोनाथन कुह्न :-)
जोश

1
नहीं, ऐसा लगता है कि यह php5.3 का बग है, अपेक्षा के अनुरूप display_errorsकाम नहीं करता है।
user198729

@user phpinfo()यह देखने की कोशिश करता है कि सेटिंग वास्तव में लागू होती है या नहीं। मुझे माफ़ कर दो, लेकिन मुझे शक है कि आपको PHP 5.3 में एक बग मिला है - मैं केवल तभी विश्वास करूंगा जब मैं इसे देखूंगा :)
Pekka

अजीब बात है, local valueपर है, लेकिन master valueबंद है, पता नहीं है कि वास्तव में क्या मतलब है ...
user198729

1
@ मुझे लगता है कि स्थानीय मान फाइलों में ini_setनिर्देश या php_ini_flagसेटिंग्स से आ सकते हैं .htaccess
पेक्का

242

PHP प्रलेखन से ( error_reporting ):

<?php
// Turn off all error reporting
error_reporting(0);
?>

उस फ़ंक्शन के अन्य दिलचस्प विकल्प:

<?php

// 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);
// For PHP < 5.3 use: 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);

?>

बहुत मददगार और सवाल का जवाब देता है। हालांकि मुझे पता है कि सभी नोटिस को भी ठीक करना बेहतर है। कभी-कभी यह सब कुछ प्रदर्शित करने के लिए आसान हो सकता है लेकिन नोटिस।
तिमो ००२

3
केवल नोटिफ़िकेशन को बंद करने से मेरे लिए काम नहीं किया गया ^ नोट का उपयोग उपरोक्त पोस्ट में कहा गया है। PHP v5.3 उपयोग के लिए: E_ALL & ~ E_NOTICE
Chizzle

यदि आपके पास JSON या XML या जो भी हो, एक REST API है, तो आप इन्हें बंद करना चाहते हैं। या कम से कम उन्हें अपवादों में परिवर्तित करें और तदनुसार उन्हें संभालें।
TheRealChx101

हैलो। मेरे लिए काम किया। आपका बहुत बहुत धन्यवाद।
एच। फरीद

यदि त्रुटियाँ stdoutput को भेजी जाती हैं, तो Display_errors नियंत्रक। लेकिन जब आप error_reporting को 0 में बदलते हैं, तो आप पूरी तरह से सभी त्रुटि-हैंडलिंग और Errorloging सामान को अक्षम कर देते हैं .. आपको त्रुटि_reporting (0) कभी नहीं करना चाहिए।
Radon8472

30

कमांड लाइन php के लिए, सेट करें

error_reporting = E_ALL & ~E_NOTICE

में /etc/php5/cli/php.ini

कमांड phpनिष्पादन तो नोटिस को हटा देता है।


Php.ini में इस एरर_रेपोर्टिंग = E_ALL & ~ E_NOTICE & ~ E_WARNING करके। यह PHP सूचना और PHP चेतावनियों को निष्क्रिय करता है। ताकि ब्राउज़र में कोई php नोटिस और php चेतावनियाँ न
दिखें

यह कंसोल php सेटिंग्स के लिए जाता है। यदि आप apache2 webserver config फाइल पर वेब पेज बनाने के लिए php का उपयोग कर रहे हैं, तो /etc/php5/apache2/php.ini यह देखने के लिए सबसे अच्छा है कि कौन सी config फाइल वास्तव में उपयोग की जाती है।
मिलान

23
<?php

// 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
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);

?>

source http://php.net/manual/en/function.error-reporting.php


2
क्या यह बरसों पहले पोस्ट किए गए इस मौजूदा जवाब का डुप्लिकेट नहीं है ?
पैंग

हम दोनों ने php डॉक्यूमेंटेशन से कॉपी पेस्ट की है और दोनों जवाबों में संसाधनों का उल्लेख किया है।
अभिषेक गोयल

@AbhishekGoel यूनिकॉर्न भेस में टट्टू हैं, यह कथन अप्रासंगिक है, आपने अभी भी चार साल बाद पहले से मौजूद उत्तर को दोहराया है ।
रिकी बॉयस

@ रिकइब मैंने मौजूदा जवाब की जांच नहीं की और न ही मैंने कॉपी की।
अभिषेक गोयल

12

अपने कोड में इस लाइन का इस्तेमाल किया

error_reporting(E_ALL ^ E_NOTICE);  

मुझे लगता है कि यह आप के लिए पूर्ण है।


6

आप क्या देख रहे हैं:

php -d error_reporting="E_ERROR | E_WARNING | E_PARSE"

2
हाय @ क्रिसियन, और StackOverflow में आपका स्वागत है! भविष्य में, यह बहुत अच्छा होगा यदि आप अपने उत्तर को थोड़ा अतिरिक्त स्पष्टीकरण / विवरण जोड़ सकते हैं, जो यह समझने के लिए कि समाधान क्यों / कैसे काम करता है / समस्या को हल करता है। बहुत बहुत धन्यवाद, और खुश कोडिंग :)
Zachary Kniebel

1
बिल्कुल सही! मैं /usr/bin/php -d error_reporting="E_ERROR | E_WARNING | E_PARSE" -f /path/to/file.phpअपने crontab
vladkras

4

मैं error_reportingअपने कोड के अंदर सेट नहीं करना पसंद करता हूं। लेकिन एक मामले में, एक विरासत उत्पाद, बहुत सारे नोटिस हैं, जिन्हें उन्हें छिपाया जाना चाहिए।

इसलिए मैंने सर्वरशिप कॉन्फ़िगर मूल्य निर्धारित करने के लिए स्निपेट का उपयोग किया, error_reportingलेकिन एस को घटाया E_NOTICE

error_reporting(error_reporting() & ~E_NOTICE);

अब त्रुटि रिपोर्टिंग सेटिंग को आगे php.iniया अंदर कॉन्फ़िगर किया जा सकता है .htaccess। केवल नोटिस हमेशा अक्षम होंगे।


3

आप ini_set('display_errors',0);अपनी स्क्रिप्ट में सेट कर सकते हैं या परिभाषित कर सकते हैं कि आप किन त्रुटियों को प्रदर्शित करना चाहते हैं error_reporting()


मुझे ini_setयहां बताई गई विधि का उपयोग करने की आवश्यकता है, error_reporting(0)कहीं और वर्णित विधि का कोई प्रभाव नहीं है।
Pix

2

त्रुटियों के कारण नहीं:

defined('DIR_FS_CATALOG') || define('DIR_FS_CATALOG', 'whatever');

यदि आपको वास्तव में करना है, तो एरर_रपोर्टिंग () से E_ALL ^ ​​E_NOTICE का उपयोग करके त्रुटि रिपोर्टिंग को बदलें।


1
यदि यह एक उत्पादन साइट है, तो आपको लगता है कि यह त्रुटि-मुक्त है या नहीं, आपको अभी भी त्रुटियों को प्रदर्शित नहीं करना चाहिए यदि वे उत्पन्न होती हैं - तो 'त्रुटियों का कारण नहीं होने से' एक वैध प्रश्न के लिए एक चुटीली प्रतिक्रिया की तरह लगता है।
कैम

5
कब से उत्पादन साइट में त्रुटियों की अनुमति देना ठीक है? मैं सहमत हूं कि एक उत्पादन साइट पर आपको त्रुटियों को प्रदर्शित नहीं करना चाहिए, यही मैं नहीं कह रहा था। मैं कह रहा था कि आपको जांचना चाहिए कि क्या स्थिरांक परिभाषित है और इसे सेट करें यदि नहीं (यही वजह है कि मैंने कोड नमूना दिया)।
जोनाथन कुह्न

हालांकि आपका जवाब "सबसे अच्छा" नहीं था, लेकिन यह ओपी के सवाल का पूरी तरह से जवाब देता है। आपके उत्तर के लिए +1 और काश यह उत्तर के रूप में चिह्नित होता, क्योंकि यह सही उत्तर है।
नाज़का

@ नाज़ा ये, मैंने तब से अपना आचरण बदल दिया है और बहुत अधिक मित्रता करने की कोशिश कर रहा हूँ। :)
जोनाथन कुह्न

2

PHP कोड के लिए:

<?php
error_reporting(E_ALL & ~E_NOTICE);

के लिए php.iniconfig:

error_reporting = E_ALL & ~E_NOTICE

1

मुझे हाल ही में यह ट्रिक मिली। एक चेतावनी की शुरुआत / त्रुटि पैदा करने वाली लाइन की शुरुआत में एक @ अजीब।

मानो जादू-टोने से गायब हो गए हों।


21
एक बुरा विचार है, आमतौर पर यह इयरप्लग में डालना पसंद है क्योंकि आपकी कार एक भयानक पीस रही है।
डेविड मोरो

10
यह वास्तव में कुछ उदाहरणों के लिए एकदम सही समझ में आता है, उदाहरण के लिए जब चर सेट या खाली हो तो कोई फर्क नहीं पड़ता।
Frans

1
यह केवल तभी समझ में आता है जब आपके पास वर्डप्रेस प्लगइन जैसा कुछ होता है जिसे लेखक ने अभी तक अपडेट नहीं किया है और आपको पता है कि समस्या क्या है। हालांकि यह एक फिक्स नहीं बल्कि एक बैंड-एड है।
शाही

मुझे error_reporting () और '@' दोनों पसंद हैं। मुझे इनमें से किसी की भी जानकारी नहीं थी। धन्यवाद। मुझे '@' पसंद है क्योंकि यह error_reporting (0) की समान कार्यक्षमता प्रदान करता है और टाइप करना आसान है। यदि मुद्दा "भयानक पीस शोर" की तुलना में "कोट हैंगर को निकास को पकड़े हुए" अधिक है, तो यह परियोजना को आगे बढ़ने की अनुमति देता है। समय मिलने पर मैं इन्हें आसानी से खोज और ठीक कर सकता हूं। यह एक ऐसे मुद्दे के साथ मदद करता है जहां त्रुटि एक फ़ाइल से पढ़े गए डेटा के कारण होती है, इसलिए कोई टाइपो या लाइब्रेरी समस्या नहीं।
मार्क लोंगमेयर

1
बस सुनिश्चित करें कि आपने @ जहाँ आप 100% सुनिश्चित कर रहे हैं कि आप क्या कर रहे हैं।
निक

1

Phpinfo () का उपयोग करें और खोजें Configuration File (php.ini) Path यह देखने के लिए खोजें कि php के लिए कौन सा कॉन्फ़िग फ़ाइल पथ का उपयोग किया गया है। PHP में चल रही पर्यावरण के आधार पर कई कॉन्फिग फाइल हो सकती हैं। आमतौर पर, कंसोल के लिए यह है:

/etc/php5/cli/php.ini

और एपीपी द्वारा संचालित php के लिए यह है:

/etc/php5/apache2/php.ini

और फिर error_reportingजिस तरह से आपको इसकी आवश्यकता है, उसे सेट करें:

http://www.phpknowhow.com/configuration/php-ini-error-settings/ http://www.zootemplate.com/news-updates/how-to-disable-notice-and-warning-in-photini- फ़ाइल


1

जैसा कि कुछ ने उल्लेख किया है और यदि आप कोड लेखक हैं, तो आपको उन सभी त्रुटियों, नोटिसों आदि को ठीक करना चाहिए, क्योंकि यह आपके लिए लंबे समय तक उन्हें ठीक न करने की तुलना में अधिक समस्याएं पैदा करेगा (विशेषकर जब आप अपने ओएस को अपग्रेड करते हैं)। आपके सर्वर के लिए, आपको केवल अपने लॉग में प्रदर्शित त्रुटियां होनी चाहिए, न कि क्लाइंट की स्क्रीन।

इसलिए अपने ब्राउज़र में त्रुटियों से बचने के लिए आप display_errorsध्वज का उपयोग करते हैं जैसा आपने पहले ही पाया था:

display_errors = Off

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

मेरे मामले में, मैं PHP चला रहा हूँ crontabकि wp-cron.phpस्क्रिप्ट एक बार में चल रही है। मुझे मेरे ईमेल पर भेजी जा रही त्रुटियां हो रही थीं, जो हर 10 मिनट में एक ईमेल मिलने पर थकाऊ हो जाती हैं! उस स्थिति में, हालांकि, Wordpress सिस्टम में एक कॉन्फ़िगरेशन फ़ाइल शामिल है WP_DEBUGऔर वे error_reporting()फ़ंक्शन को कॉल करते हैं इसलिए error_reportingकमांड लाइन पर चर को बदलने की कोशिश करेंगे। इसके बजाय आपको wp-config.phpफ़ाइल को रूट फ़ोल्डर में संपादित करना होगा और यह सुनिश्चित करना होगा कि WP_DEBUGयह किसके लिए सेट है false। अन्यथा आप हर समय उन सभी चेतावनियों और नोटिसों को प्राप्त करेंगे।


0

आप देख सकते हैं कि क्या स्थिरांक पहले से ही परिभाषित है:

<?php
if (!defined('MYCONST'))
    define('MYCONST', 'Weeha!');
?>

0

मेरा मानना ​​है कि php.ini में display_errors पर टिप्पणी करने से काम नहीं चलेगा क्योंकि डिफ़ॉल्ट चालू है। आपको इसके बजाय इसे 'बंद' पर सेट करना होगा।

कॉन्फ़िगरेशन परिवर्तन लागू करने के लिए अपाचे को पुनरारंभ करना न भूलें।

यह भी ध्यान दें कि जब आप प्रदर्शन_रोज को रनटाइम पर सेट कर सकते हैं, तो इसे यहां बदलने से FATAL त्रुटियों को प्रभावित नहीं किया जा सकता है।

जैसा कि दूसरों ने नोट किया है, आदर्श रूप से विकास के दौरान आपको उच्चतम स्तर पर error_reporting के साथ चलना चाहिए और Display_errors सक्षम होना चाहिए। जब आप पहली बार शुरू करते हैं तो गुस्सा करते हुए, ये त्रुटियां, चेतावनी, नोटिस और सख्त कोडिंग सलाह सभी को जोड़ते हैं और आपको एक बेहतर कोडर बनने में सक्षम बनाते हैं।


0

डबल परिभाषित स्थिरांक

यहां विशिष्ट त्रुटि को ठीक करने के लिए आप यह जांच सकते हैं कि इसे परिभाषित करने से पहले कोई स्थिरांक पहले से ही परिभाषित है या नहीं:

if ( ! defined( 'DIR_FS_CATALOG' ) ) 
  define( 'DIR_FS_CATALOG', 'something...' );

मैं व्यक्तिगत रूप से निरंतर के लिए कोडबेस में एक खोज के साथ शुरू करता हूं DIR_FS_CATALOG, फिर इस के साथ दोहरी परिभाषा को प्रतिस्थापित करता हूं ।

PHP के नोटिस को इनलाइन छिपाना, मामला-दर-मामला

PHP @त्रुटि नियंत्रण ऑपरेटर प्रदान करता है , जिसका उपयोग आप विशिष्ट कार्यों को अनदेखा करने के लिए कर सकते हैं जो नोटिस या चेतावनी का कारण बनते हैं।

इसके उपयोग से आप अपने कोड में केस-बाय-केस आधार पर नोटिस और चेतावनियों को अनदेखा / अक्षम कर सकते हैं, जो उन स्थितियों के लिए उपयोगी हो सकता है जहाँ कोई त्रुटि या सूचना जानबूझकर, योजना बनाई गई है, या केवल सर्वथा कष्टप्रद है और स्रोत पर हल करना संभव नहीं है । जगह ए@ है कि के एक नोटिस के कारण और यह ध्यान नहीं दिया जाएगा समारोह या वर से पहले।

यहाँ एक उदाहरण है:

// Intentional file error
$missing_file = @file( 'non_existent_file' );

इस पर और अधिक PHP के त्रुटि नियंत्रण ऑपरेटरों डॉक्स में पाया जा सकता है ।

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