यह लोडेड बनाम रनटाइम कॉन्फ़िगरेशन की समस्या है
यह समझना महत्वपूर्ण है कि संकलित त्रुटि या पार्स त्रुटि संकलन या पार्सिंग चरण के दौरान होती है , जिसका अर्थ है कि PHP इससे पहले कि आपके किसी भी कोड को निष्पादित करने का मौका था, जमानत हो जाएगी। इसलिए यदि आप display_errors
रनटाइम के दौरान PHP के कॉन्फ़िगरेशन को संशोधित कर रहे हैं , (इसमें ini_set
आपके कोड का उपयोग करने से लेकर .htaccess, जो कि रनटाइम कॉन्फ़िगरेशन फ़ाइल है) में कुछ भी शामिल है , तब केवल डिफ़ॉल्ट लोड कॉन्फ़िगरेशन सेटिंग्स ही चलन में हैं।
हमेशा विकास में WSOD से कैसे बचें
एक WSOD आप सुनिश्चित करें कि आपके बनाना चाहते से बचने के लिए लोड विन्यास फाइल है display_errors
पर और error_reporting
करने के लिए सेट -1
( इस बराबर E_ALL क्योंकि यह सुनिश्चित सभी बिट्स पीएचपी का कौन सा संस्करण आप चला रहे हैं की परवाह किए बिना चालू हैं है )। E_ALL के निरंतर मूल्य को हार्डकोड न करें, क्योंकि यह मूल्य PHP के विभिन्न संस्करणों के बीच परिवर्तन के अधीन है।
लोडेड विन्यास या तो अपने लोड php.ini
फ़ाइल या अपने apache.conf
या httpd.conf
या वर्चुअलहोस्ट फ़ाइल। वे फ़ाइलें केवल स्टार्टअप चरण के दौरान एक बार पढ़ी जाती हैं (जब आप पहली बार Apache httpd या php-fpm शुरू करते हैं, उदाहरण के लिए) और केवल रनटाइम कॉन्फ़िगरेशन परिवर्तन द्वारा ओवरराइड किया जाता है। यह सुनिश्चित करना कि display_errors = 1
और error_reporting = -1
आपकी भरी हुई विन्यास फाइल में यह सुनिश्चित किया गया है कि आप कभी भी WSOD को सिंटैक्स या पार्स त्रुटि की परवाह किए बिना नहीं देखेंगे, जो रनटाइम बदलने से पहले घटित हो सकता है ini_set('display_errors', 1);
या error_reporting(E_ALL);
हो सकता है।
आपकी (php.ini) लोड की गई कॉन्फ़िगरेशन फ़ाइलों को कैसे खोजें
अपनी भरी हुई कॉन्फ़िगरेशन फ़ाइल (एस) का पता लगाने के लिए केवल निम्नलिखित कोड के साथ एक नई PHP फ़ाइल बनाएं ...
<?php
phpinfo();
फिर अपने ब्राउज़र को वहां इंगित करें और लोड की गई कॉन्फ़िगरेशन फ़ाइल और अतिरिक्त .ini फ़ाइलों को देखें , जो आमतौर पर आपके सबसे ऊपर हैं और आपकी phpinfo()
सभी भरी हुई कॉन्फ़िगरेशन फ़ाइलों में पूर्ण पथ शामिल करेंगी।
यदि आप (none)
फ़ाइल के बजाय देखते हैं , तो इसका मतलब है कि आपके पास कॉन्फ़िगरेशन फ़ाइल (php.ini) पथ में php.ini नहीं है । तो आप यहां से PHP के साथ बंडल किए गए स्टॉक php.ini को डाउनलोड कर सकते हैं और इसे अपने कॉन्फ़िगरेशन फ़ाइल पथ में php.ini के रूप में कॉपी कर सकते हैं, फिर सुनिश्चित करें कि आपके php उपयोगकर्ता के पास उस फ़ाइल से पढ़ने के लिए पर्याप्त अनुमतियाँ हैं। आप पुनः आरंभ httpd या php-एफ पी एम में लोड करने के लिए की आवश्यकता होगी। याद रखें, यह है विकास पीएचपी स्रोत के साथ आता है कि php.ini फ़ाइल। तो कृपया इसे उत्पादन में उपयोग न करें!
उत्पादन में बस यह मत करो
यह वास्तव में विकास में एक WSOD से बचने का सबसे अच्छा तरीका है। किसी को भी सुझाव है कि आप डाल ini_set('display_errors', 1);
या error_reporting(E_ALL);
अपने PHP स्क्रिप्ट के शीर्ष पर या .htaccess का उपयोग कर की तरह तुम यहाँ किया था, मदद करने के लिए आप जब एक वाक्य रचना या पार्स त्रुटि (आपके मामले में की तरह यहाँ) होती है, तो अपने लोड विन्यास फाइल एक WSOD से बचने नहीं जा रहा है display_errors
बंद हो गया है।
कई लोग (और PHP के स्टॉक इंस्टॉलेशन) एक प्रोडक्शन-आईआई फाइल का उपयोग करेंगे display_errors
, जो डिफ़ॉल्ट रूप से बंद हो गया है, जिसके परिणामस्वरूप आमतौर पर आपके द्वारा यहां अनुभव की गई इसी निराशा होती है। क्योंकि PHP पहले ही बंद हो गई है जब वह शुरू होता है, तो एक सिंटैक्स या पार्स त्रुटि का सामना करता है, और आउटपुट के बिना कुछ भी नहीं होता है। आप उम्मीद करते हैं कि आपके ini_set('display_errors',1);
PHP स्क्रिप्ट के शीर्ष पर रहने से आपको बचना चाहिए था, लेकिन इससे कोई फर्क नहीं पड़ता कि क्या PHP आपके कोड को पार्स नहीं कर सकता क्योंकि यह रनटाइम तक कभी नहीं पहुंचेगा।