परिचय: डेवलपर्स व्हाइट स्क्रीन से क्यों डरते हैं?
\n\nहर PHP डेवलपर कभी न कभी इस स्थिति से गुज़रा है: कोड लिखा हुआ है, लेकिन रिज़ल्ट के बजाय एक खाली पेज दिखता है। न कोई एरर, न कोई चेतावनी। बस सन्नाटा और पसीना। परिचित लग रहा है?
\n\nStack Overflow पर सवाल "How do I get PHP errors to display?" को हज़ारों व्यूज़ और सैकड़ों जवाब मिले हैं। यह कोई संयोग नहीं है: एरर को सही तरीके से चालू और हैंडल करना एक बुनियादी स्किल है जो डिबगिंग के घंटों को बचाता है। लेकिन एक पेंच है: गलत सेटिंग न केवल मदद नहीं करेगी, बल्कि आपकी साइट की परफॉरमेंस को कम कर सकती है या, इससे भी बुरा, सुरक्षा कमज़ोरियाँ खोल सकती है।
\n\nइस आर्टिकल में हम PHP एरर आउटपुट चालू करने के सभी तरीकों को समझेंगे — लोकल डेवलपमेंट के लिए त्वरित समाधान से लेकर प्रोडक्शन सर्वर के लिए सुरक्षित सेटिंग्स तक। और हाँ, ऑप्टिमाइज़ेशन पर भी बात करेंगे: लॉग को न भरें और साइट को धीमा न करें।
\n\nत्वरित जानकारी: PHP एरर कितने प्रकार के होते हैं?
\n\nडिस्प्ले चालू करने से पहले, यह समझना ज़रूरी है कि हम किससे निपट रहे हैं। PHP कई लेवल के एरर जनरेट करता है:
\n\n- \n
- E_ERROR — घातक एरर। स्क्रिप्ट रुक जाती है। उदाहरण: मेमोरी की कमी, गैर-मौजूद क्लास को कॉल करना। \n
- E_WARNING — गैर-घातक। स्क्रिप्ट चलती रहती है, लेकिन कुछ गलत हुआ। उदाहरण: ऐसी फ़ाइल को include करना जो मौजूद नहीं है। \n
- E_NOTICE — सूचना। आमतौर पर छोटी समस्याओं के लिए (अपरिभाषित वेरिएबल)। \n
- E_PARSE — सिंटैक्स एरर। कोड एक्ज़ीक्यूट होने से पहले होता है, इसे runtime में पकड़ना मुश्किल है। \n
- E_ALL — सभी लेवल शामिल करता है, E_STRICT को छोड़कर (PHP 8.0 से पहले)। \n
याद रखें: डेवलपमेंट के दौरान हम सभी एरर देखना चाहते हैं। प्रोडक्शन सर्वर पर — केवल गंभीर एरर, और वो भी लॉग में, स्क्रीन पर नहीं।
\n\nतरीका #1: तेज़ और गंदा — सीधे कोड में
\n\nएक बार की डिबगिंग के लिए सबसे आसान तरीका — स्क्रिप्ट की शुरुआत में दो जादुई लाइनें डालें:
\n\n<?php\nini_set('display_errors', 1);\nini_set('display_startup_errors', 1);\nerror_reporting(E_ALL);\n?>\n\nयहाँ क्या हो रहा है?
\n- \n
display_errors— स्क्रीन पर एरर दिखाना चालू करता है। \n display_startup_errors— PHP स्टार्टअप के दौरान हुए एरर दिखाता है (जैसे php.ini में)। \n error_reporting(E_ALL)— रिपोर्टिंग लेवल सेट करता है: सब कुछ दिखाएँ। \n
यह तरीका एक फ़ाइल के लिए आदर्श है जिसे आप डीबग कर रहे हैं। लेकिन नुकसान हैं: प्रोडक्शन पर डालने से पहले इन लाइनों को हटाना याद रखें। नहीं तो आप यूज़र्स को अपने एप्लिकेशन की "अंतड़ियाँ" दिखा सकते हैं।
\n\nतरीका #2: php.ini सेटिंग — ग्लोबल और स्थायी
\n\nअगर आप लोकल मशीन पर काम करते हैं या सर्वर को कंट्रोल करते हैं, तो php.ini को एडिट करना सबसे आसान है। यह फ़ाइल ढूँढें (आमतौर पर /etc/php/ या /usr/local/etc/php/ में) और निम्न डायरेक्टिव बदलें:
\n\ndisplay_errors = On\ndisplay_startup_errors = On\nerror_reporting = E_ALL\n\nबदलाव के बाद वेब सर्वर को रीस्टार्ट करना न भूलें:
\nsudo systemctl restart apache2\n# या\nsudo systemctl restart nginx php8.1-fpm\n\nमहत्वपूर्ण: प्रोडक्शन सर्वर पर display_errors को Off रखें। इसके बजाय, एरर को फ़ाइल में लॉग करने की सेटिंग करें:
display_errors = Off\nlog_errors = On\nerror_log = /var/log/php_errors.log\nerror_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT\n\nइससे आउटपुट पर लोड कम होता है और साइट का डेटा सुरक्षित रहता है।
\n\nतरीका #3: .htaccess के ज़रिए — शेयर्ड होस्टिंग के लिए
\n\nअगर आपके पास php.ini तक पहुँच नहीं है (जैसे सस्ती होस्टिंग), तो साइट की रूट डायरेक्टरी में .htaccess फ़ाइल का उपयोग करें:
\n\nphp_flag display_errors on\nphp_flag display_startup_errors on\nphp_value error_reporting 32767