«PHP सफेद स्क्रीन दिखाता है, और मुझे त्रुटियाँ चाहिए!» — क्या यह स्थिति परिचित है?
\n\nआप PHP में कोड लिखते हैं, स्क्रिप्ट चलाते हैं, और परिणाम के बजाय खालीपन मिलता है। या, इससे भी बुरा, कोई अजीब त्रुटि बिना किसी कारण के संकेत के। परिचित है? यदि आपने कभी सोचा है «How can I get useful error messages in PHP?» — तो आप अकेले नहीं हैं। Stack Overflow पर इस प्रश्न को हजारों बार देखा गया है, और यह व्यर्थ नहीं है। PHP डिफ़ॉल्ट रूप से production सर्वर पर त्रुटियों को छिपाने के लिए सेट किया गया है, लेकिन विकास के चरण में यह एक वास्तविक सिरदर्द बन जाता है।
\n\nइस लेख में, हम PHP को आपसे स्पष्ट भाषा में बात करने के सभी तरीकों पर चर्चा करेंगे। आप सीखेंगे कि त्रुटियों का प्रदर्शन कैसे चालू करें, उनके विवरण का स्तर कैसे सेट करें, और उन्हें लॉग कैसे करें, ताकि डिबगिंग अनुमान लगाने जैसा न रहे। चलिए शुरू करते हैं!
\n\nPHP चुप क्यों है? समस्या की जड़ — सर्वर सेटिंग्स
\n\nइससे पहले कि हम उपयोगी संदेश प्राप्त करना सीखें, आइए समझें कि वे क्यों नहीं हैं। PHP एक सख्त सुरक्षा दर्शन वाली भाषा है। उत्पादन (production) सर्वर पर उपयोगकर्ताओं को त्रुटियाँ दिखाना बुरा व्यवहार और सुरक्षा के लिए खतरा है। इसलिए php.ini (PHP की मुख्य कॉन्फ़िगरेशन फ़ाइल) में डिफ़ॉल्ट रूप से ये सेटिंग्स होती हैं:
- \n
display_errors = Off— त्रुटियाँ स्क्रीन पर प्रदर्शित नहीं होती हैं। \n error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT— सभी प्रकार की त्रुटियाँ नहीं दिखाई जाती हैं। \n
लेकिन स्थानीय विकास के लिए यह एक आपदा है। इसे कैसे ठीक करें? तीन मुख्य तरीके हैं।
\n\nविधि 1: php.ini बदलें (यदि पहुँच हो)
\n\nसबसे विश्वसनीय तरीका php.ini फ़ाइल को संपादित करना है। इसे खोजें (आमतौर पर यह PHP इंस्टॉलेशन की रूट में या Linux पर etc/ फ़ोल्डर में होता है)। फिर निम्नलिखित पंक्तियों को खोजें और बदलें:
; स्क्रीन पर त्रुटि आउटपुट चालू करें\ndisplay_errors = On\n\n; अधिकतम रिपोर्टिंग स्तर सेट करें (पुरानी चेतावनियों को छोड़कर सभी त्रुटियाँ)\nerror_reporting = E_ALL\n\nबदलावों के बाद, वेब सर्वर (Apache, Nginx या PHP बिल्ट-इन सर्वर) को पुनरारंभ करना सुनिश्चित करें, अन्यथा सेटिंग्स लागू नहीं होंगी।
\n\nमहत्वपूर्ण: उत्पादन सर्वर पर display_errors हमेशा Off होना चाहिए। इस विधि का उपयोग केवल विकास के लिए करें।
विधि 2: .htaccess का उपयोग करें (Apache के लिए)
\n\nयदि आपके पास php.ini तक पहुँच नहीं है, लेकिन आप Apache का उपयोग कर रहे हैं, तो आप अपनी साइट की रूट में .htaccess फ़ाइल के माध्यम से सेटिंग्स को ओवरराइड कर सकते हैं। इसमें जोड़ें:
php_flag display_errors on\nphp_value error_reporting E_ALL\n\nयह काम करेगा यदि Apache PHP निर्देशों को ओवरराइड करने की अनुमति देता है (आमतौर पर अधिकांश होस्टिंग पर ऐसा होता है)।
\n\nविधि 3: कोड में सीधे त्रुटियाँ चालू करें (सबसे लचीला)
\n\nत्वरित डिबगिंग के लिए यह मेरी पसंदीदा विधि है। आप स्क्रिप्ट की शुरुआत में (<?php के तुरंत बाद) ये पंक्तियाँ डाल सकते हैं:
<?php\n// त्रुटि रिपोर्टिंग का अधिकतम स्तर चालू करें\nerror_reporting(E_ALL);\n\n// स्क्रीन पर त्रुटि आउटपुट चालू करें\nini_set('display_errors', 1);\n\n// स्टार्टअप त्रुटियों का आउटपुट चालू करें (उदाहरण के लिए, यदि ini_set में ही त्रुटि हो)\nini_set('display_startup_errors', 1);\n?>\n\nअब कोई भी Warning, Notice या Fatal Error सीधे ब्राउज़र में दिखाई देगा। सुविधाजनक है, है ना?
PHP में किस प्रकार की त्रुटियाँ होती हैं और उनका क्या अर्थ है?
\n\nPHP के «संकेतों» को पढ़ने के लिए, आपको उनकी भाषा जाननी होगी। यहाँ मुख्य प्रकार की त्रुटियाँ हैं जो आप सबसे अधिक बार देखेंगे:
\n\n- \n
- E_ERROR — घातक त्रुटि। स्क्रिप्ट रुक जाती है। उदाहरण: एक गैर-मौजूद फ़ंक्शन को कॉल करना। \n
- E_WARNING — चेतावनी। स्क्रिप्ट काम करना जारी रखती है, लेकिन कुछ गलत हो गया है। उदाहरण: गैर-मौजूद फ़ाइल का
include()। \n - E_NOTICE — सूचना। त्रुटि नहीं, लेकिन एक संभावित समस्या। उदाहरण: एक अपरिभाषित चर का उपयोग।<