2008-09-16 7 views
28

आम तौर पर मैं कुछ भी देखने के लिए E_ALL का उपयोग करता हूं जो PHP मेरे कोड के बारे में कहने और सुधारने के लिए कह सकता है।विकास के लिए अनुशंसित त्रुटि_ रिपोर्टिंग() सेटिंग क्या है? E_STRICT के बारे में क्या?

मैंने अभी एक त्रुटि निरंतर E_STRICT देखा है, लेकिन इसके बारे में कभी भी इसका उपयोग नहीं किया है या नहीं, क्या यह विकास के लिए उपयोग करने के लिए एक अच्छी सेटिंग है? मैनुअल कहता है:

रन-टाइम नोटिस। PHP को आपके कोड में परिवर्तन का सुझाव देने में सक्षम करें जो आपके कोड की सर्वोत्तम इंटरऑपरेबिलिटी और आगे संगतता सुनिश्चित करेगा।

तो मैं अगर मैं E_ALL के साथ सबसे अच्छा error_reporting स्तर का उपयोग कर रहा है या उस E_STRICT के साथ सबसे अच्छा होगा सोच रहा हूँ? या क्या कोई अन्य संयोजन है जिसे मैंने अभी तक सीखना है?

उत्तर

43

PHP 5 में, E_STRICT द्वारा कवर बातें E_ALL में शामिल नहीं हैं, इसलिए अधिकांश जानकारी पाने के लिए जा रहा है, तो आप उन्हें गठबंधन करने के लिए की जरूरत है:

error_reporting(E_ALL | E_STRICT); 

PHP 5.4, E_STRICT में E_ALL में शामिल किया जाएगा, ताकि आप केवल E_ALL का उपयोग कर सकें।

तुम भी

error_reporting(-1); 

उपयोग कर सकते हैं जो हमेशा सभी त्रुटियों सक्षम हो जाएगा। जो अधिक अर्थात् सही रूप से सही है:

error_reporting(~0); 
+1

बस ध्यान दें कि PHP> = 5.4 के साथ E_STRICT को E_ALL – mTorres

+1

@hakre के साथ शामिल किया गया है, मुझे यकीन नहीं है कि मैं इस उत्तर पर आपका संपादन समझता हूं।आप स्पष्ट रूप से यह कह रहे हैं कि 'गूढ़ प्रणाली' पर, यह संभव है कि '-1! = ~ 0'। ये गूढ़ प्रणाली क्या हैं, और क्या वे वास्तव में मौजूद हैं? क्या मुझे लगता है कि PHP के पूर्णांक को PHP उपयोगों को संकलित करने के लिए उपयोग किए जाने वाले सी संकलक में संग्रहीत किया जाता है, और यह कि आप एक काल्पनिक परिदृश्य के बारे में सोच रहे हैं जिसमें किसी के पूरक सी कंपाइलर कहते हैं, PHP किसी को संकलित करता है? वैसे भी, गॉर्डन के कोड स्निपेट को बस संशोधित करने से बेहतर नहीं होगा जो वास्तव में "वास्तव में, अंतिम अनुच्छेद गलत है" संपादित करने से बेहतर होगा? –

+1

-1 एक संख्या है, - एक संख्यात्मक ऑपरेटर। नकारात्मक पूर्णांक को कैसे नियंत्रित किया जाता है इस पर निर्भर करता है कि यह ~ 0 का प्रतिनिधित्व कर सकता है लेकिन यह नहीं होना चाहिए। जहां यह नहीं है, वे वे सिस्टम हैं जिन्हें मैंने "गूढ़" नाम दिया है। तकनीकी रूप से गलत क्या है कि आप एक संख्यात्मक ऑपरेटर के बजाय बिट-ऑपरेटर ~ का उपयोग करना चाहते हैं। Http://stackoverflow.com/questions/1967360/what-does- यह-operator-mean- यह वही है जिसे आप आम तौर पर व्यक्त करना चाहते हैं। इसलिए अधिक सही अभिव्यक्ति का उपयोग करने में कोड कम गलत है। और हाँ, मैंने इसे एक बार अनुभव किया है। लेकिन यह थोड़ा सा समय पहले, मुझसे पूछा गया था कि मैं पहले से ही मन से पुन: पेश नहीं कर सका। – hakre

-1

ini_set ("display_errors", "2"); ERROR_REPORTING (E_ALL);

+0

ठीक, पीएचपी के फ़ंक्शन नाम केस संवेदी होती हैं, लेकिन आप बल्कि यह जिस तरह से यह प्रयोग किया जाना चाहिए का उपयोग करना चाहिए (उदाहरण के लिए 'error_reporting (E_ALL | E_STRICT)', जहां फ़ंक्शन का नाम पूंजी अक्षरों के साथ नहीं लिखा गया है)। वैसे, 'E_ALL' में 5.4 से कम PHP संस्करणों में 'E_STRICT' नहीं है। – Sk8erPeter

5

मेरी राय में, आप विकास चरण में त्रुटि रिपोर्टिंग स्तर को जितना अधिक सेट करेंगे उतना ही बेहतर होगा।

एक जीवंत वातावरण में, आप थोड़ा (लेकिन केवल थोड़ा) कम सेट चाहते हैं, लेकिन आप उन्हें कहीं भी लॉग इन करना चाहते हैं कि वे उपयोगकर्ता द्वारा नहीं देखे जा सकते हैं (मैं syslog पसंद करता हूं)।

http://php.net/error_reporting

5.2.0 से पहले पीएचपी साथ विकास के लिए E_ALL | E_STRICT

5.2 E_RECOVERABLE_ERROR और 5.3 परिचय E_DEPRECATED और E_USER_DEPRECATED प्रस्तुत करता है। यदि आप उन संस्करणों में से किसी एक को चला रहे हैं तो आप शायद उनको चालू करना चाहेंगे।

आप आप सिर्फ 2^n-1 में से कुछ काफी अधिक मूल्य के लिए error_reporting मूल्य निर्धारित कर सकते हैं जादू नंबरों का उपयोग करना चाहता है तो - कहते हैं, 16777215, और कहा कि वास्तव में सिर्फ 1..n के बीच सभी बिट्स पर बारी होगी। लेकिन मुझे नहीं लगता कि जादू संख्याओं का उपयोग करना एक अच्छा विचार है ...

मेरी राय में, PHP ने E_ALL होने से गेंद को थोड़ा सा गिरा दिया है। लेकिन जाहिरा तौर पर यह PHP 6 में निर्धारित किया जा करने के लिए ...

2

नए PHP संस्करणों में, E_ALL में त्रुटियों के अधिक वर्ग शामिल हैं। चूंकि PHP 5.3, E_ALL में सब कुछ शामिल है E_STRICT को छोड़कर। PHP 6 में यह सब कुछ भी शामिल होगा।यह एक अच्छा संकेत है: कम से कम त्रुटि संदेशों को देखना बेहतर है।

E_ALL में जो शामिल है उसे ऑनलाइन मैनुअल में PHP predefined constants पृष्ठ में दस्तावेज़ित किया गया है।

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

+0

E_STRICT को 5.4 के रूप में E_ALL में शामिल किया गया है। –

1

इस कोड के लिए आपकी दीर्घकालिक समर्थन योजनाओं के आधार पर, E_STRICT सक्षम के साथ डिबगिंग करने से आपके कोड को दूर के भविष्य में काम करना जारी रखने में मदद मिल सकती है, लेकिन यह शायद दिन-प्रति-दिन उपयोग के लिए अधिक है।

  1. Per the manual, सबसे E_STRICT त्रुटियों संकलन समय पर उत्पन्न कर रहे हैं, रनटाइम नहीं: वहाँ E_STRICT के बारे में दो महत्वपूर्ण बातें ध्यान में रखने की है। यदि आप अपने कोड के भीतर त्रुटि स्तर E_ALL में बढ़ा रहे हैं (और php.ini के माध्यम से नहीं), तो आप कभी भी E_STRICT त्रुटियों को कभी भी नहीं देख सकते हैं।
  2. E_STRICT पीएचपी 6 के तहत E_ALL के भीतर निहित है, लेकिन नहीं पीएचपी 5. यदि आप PHP6 के लिए अपने सर्वर का उन्नयन, और ऊपर # 1 में वर्णित के रूप में E_ALL कॉन्फ़िगर किया है तो के तहत, आप पर कोई भी अन्य परिवर्तन की आवश्यकता के बिना E_STRICT त्रुटियों देखना शुरू कर देंगे तुम्हारा हिस्सा।
+0

E_STRICT को 5.4 के रूप में E_ALL में शामिल किया गया है। PHP 6 नहीं – Lee

0

नहीं सख्ती से error_reporting की बात कर रहा है, मैं चाहते दृढ़ता से किसी भी आईडीई कि स्वचालित रूप से पार्सिंग त्रुटियाँ और आम खामियों से पता चलता उपयोग करने का सुझाव (जैसे, हालत में काम)।

ग्रहण के लिए ज़ेंड स्टूडियो में यह सुविधा डिफ़ॉल्ट रूप से सक्षम है, और जब से मैंने इसका उपयोग करना शुरू किया है, तो यह को की मदद से पहले त्रुटियों को पकड़ने में मेरी सहायता कर रहा है।

उदाहरण के लिए, मेरे पास कोड का यह टुकड़ा था जहां मैं $GLOBALS चर में कुछ डेटा कैश कर रहा था, लेकिन मैंने अनजाने में $_GLOBALS लिखा था। डेटा कभी कैश नहीं हुआ, और मुझे कभी नहीं पता था कि ज़ेंड ने मुझे नहीं बताया था: "अरे, यह $_GLOBALS चीज़ केवल एक बार दिखाई देती है, यह एक त्रुटि हो सकती है"।

10

उपयोग php.ini में निम्नलिखित:

error_reporting = E_ALL | E_STRICT 

इसके अलावा, आप Xdebug स्थापित करना चाहिए, यह चमकीले रंग और प्रिंट उपयोगी विस्तृत जानकारी चकाचौंध में अपनी त्रुटियों को उजागर कर सकते हैं।

कभी भी आपके कोड में कोई त्रुटि या सूचना न दें, भले ही यह हानिरहित हो।

2

आप उपयोग कर सकते हैं error_reporting = -1
यह हमेशा सभी बिट्स से मिलकर बनता है (भले ही वे E_ALL में नहीं हैं)

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