2011-09-08 15 views
9

मेरे पास एक विरासत ऐप है जिसके लिए register_globals और magic_quotes_gpc सक्षम होना आवश्यक है। मेरे पास error_reportingE_ALL & ~E_DEPRECATED पर सेट है क्योंकि मैं अभी भी कोई चेतावनी देखना चाहता हूं।PHP 5.3 बहिष्करण संदेश चेतावनियों के रूप में दिखाए गए

जब मैं PHP CLI चलाने मैं निम्नलिखित

$ php -d "error_reporting=E_ALL & ~E_DEPRECATED" -v 
PHP Warning: Directive 'register_globals' is deprecated in PHP 5.3 and greater in Unknown on line 0 
PHP Warning: Directive 'magic_quotes_gpc' is deprecated in PHP 5.3 and greater in Unknown on line 0 
PHP 5.3.3 (cli) (built: Mar 30 2011 13:51:41) 
Copyright (c) 1997-2010 The PHP Group 
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies 
    with Xdebug v2.1.2, Copyright (c) 2002-2011, by Derick Rethans 

यह चेतावनी के रूप में निंदा संदेशों क्यों दिखा रहा है? क्या वे E_DEPRECATED स्तर पर नहीं होना चाहिए?

ऐसा लगता है कि मैं उन्हें जाने के लिए दूर

$ php -d "error_reporting=E_ALL & ~E_WARNING" -v 
PHP 5.3.3 (cli) (built: Mar 30 2011 13:51:41) 
Copyright (c) 1997-2010 The PHP Group 
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies 
    with Xdebug v2.1.2, Copyright (c) 2002-2011, by Derick Rethans 

मैं अपने error_reportingE_ALL & ~E_DEPRECATED & ~E_WARNING को बदल सकता है, लेकिन फिर यह मेरे webapp के लिए चेतावनी नहीं दिखाया जाएगा प्राप्त करने के लिए चेतावनी नहीं दिखाने के लिए। कोई सुझाव? क्या मुझे सीएलआई के लिए अलग php.ini का उपयोग करना है?

+0

इसे E_WARNING के रूप में प्रोग्राम किया गया है। और वह वह है। (बीटीडब्ल्यू, दोनों चेतावनियों को ठीक करना आसान होगा।) – mario

+1

आपको दोनों निर्देशों को बंद करना चाहिए। वे बुरे बुरे विचार हैं। –

+0

@ ओन्ड्रेज मिर्ट्स सिर्फ ओपी को उद्धृत करते हैं, क्योंकि ऐसा लगता है कि आप पहली पंक्ति को याद करते हैं: "मेरे पास एक विरासत ऐप है जिसके लिए register_globals और magic_quotes_gpc सक्षम होना आवश्यक है।" –

उत्तर

0

इसे या तो उपयोग करने के लिए सबसे अच्छा अभ्यास माना जाता है। वे E_WARNING एस हैं क्योंकि वे त्रुटियों के प्रकार हैं जिन्हें डेवलपर्स ने ट्रिगर करने के लिए चुना है (यह उस स्तर पर किसी दूसरे के विपरीत उपयोग करने के लिए मनमाने ढंग से है)।

मैं अत्यधिक अनुशंसा करता हूं कि आप सुनिश्चित करें कि उन सुविधाओं को आपकी कॉन्फ़िगरेशन में बंद कर दिया गया है, या यदि आप इससे बच नहीं सकते हैं, तो कॉन्फ़िगरेशन में उन प्रकार की चेतावनियों को बंद करें। अन्यथा, आप इसे AJAX अनुरोध को बर्बाद करने का जोखिम उठाते हैं। हम सभी को इसका सामना करना पड़ता है।

0

आपके पास display of startup errors को बंद करने में कुछ भाग्य हो सकता है। त्रुटियों को अभी भी आपके त्रुटि लॉग में लॉग इन होना चाहिए, लेकिन वे आपके एप्लिकेशन के आउटपुट में प्रदर्शित नहीं होंगे।

+0

मेरे पास 'display_startup_errors = off' है और अभी भी चेतावनियां प्राप्त हैं। – ejunker

0

आप

set_error_handler("myFunc"); 

के साथ अपने त्रुटि हैंडलर पंजीकृत करने की कोशिश कर सकते हैं और myFunc कुछ की तरह है:

myFunc($errno,$errstr) { 
    return strpos($errstr,"register_globals")===false ? false : true; 
} 

इसलिए, यदि स्ट्रिंग "रजिस्टर" नहीं मिला है, समारोह रिटर्न झूठी और मानक त्रुटि हैंडलिंग शुरू होता है, अन्यथा यह सच हो जाता है और कुछ भी नहीं होता है।

1

LMGTFY

सबसे अच्छा उत्तर

[2009-09-07 08:42 यूटीसी] [email protected] हां। यह E_DEPRECATED नहीं है, यह E_WARNING है और वह बदलने वाला नहीं है।

[2010-03-23 ​​14:26 यूटीसी] [email protected] एएसओएसटी डॉट डीके पर एक्स> यदि दस्तावेज़ीकरण वास्तव में कहता है, तो इसे पहले से बंद रिपोर्ट को बंप करने के बजाय एक अलग मुद्दे के रूप में रिपोर्ट करें।

ऐसा लगता है कि आपको यह व्यवहार करने का तरीका स्वीकार करना है कि यह कैसे व्यवहार करता है।
परिवर्तन केवल v6

2

error_reporting से E_ALL & ~E_DEPRECATED & ~E_WARNING पर लागू होंगे।

फिर, अपने कोड सेट की शुरुआत में:

error_reporting(E_ALL | E_STRICT); 

प्रारंभिक पीएचपी जांच में सफल हो गए हैं और अब आप अपना पूरा त्रुटि सूचना दी वातावरण है। :)

संबंधित मुद्दे