मुझे PHP में उपयोगी त्रुटि संदेश कैसे मिल सकते हैं?
काफी बार मैं कोशिश करूंगा कि PHP स्क्रिप्ट चलाऊं और बस एक खाली स्क्रीन वापस पाऊं। कोई त्रुटि संदेश नहीं; बस एक खाली स्क्रीन। कारण एक साधारण वाक्यविन्यास त्रुटि (गलत ब्रैकेट, लापता अर्धविराम), या एक असफल फ़ंक्शन कॉल, या पूरी तरह से कुछ और हो सकता है।
यह पता लगाना बहुत मुश्किल है कि क्या गलत हुआ। मैं अंत में कोड टिप्पणी कर रहा हूं, हर जगह "गूंज" बयान दर्ज कर रहा हूं, आदि समस्या को कम करने की कोशिश कर रहे हैं। लेकिन निश्चित रूप से एक बेहतर तरीका होना चाहिए, है ना?
क्या जावा को उपयोगी त्रुटि संदेश उत्पन्न करने के लिए PHP प्राप्त करने का एक तरीका है, जैसे जावा करता है?
जवाब
सिंटैक्स त्रुटियों के लिए, आपको php.ini में त्रुटि प्रदर्शन को सक्षम करना होगा। डिफ़ॉल्ट रूप से इन्हें बंद कर दिया जाता है क्योंकि आप त्रुटि संदेश देखकर "ग्राहक" नहीं चाहते हैं। 2 निर्देशों पर जानकारी के लिए PHP प्रलेखन में इस पृष्ठ की जाँच करें : error_reporting
और display_errors
। display_errors
शायद वह है जिसे आप बदलना चाहते हैं। यदि आप php.ini को संशोधित नहीं कर सकते हैं, तो आप एक .htaccess फ़ाइल में निम्न पंक्तियाँ भी जोड़ सकते हैं:
php_flag display_errors on
php_value error_reporting 2039
आप error_reporting
सभी त्रुटियों को प्राप्त करने के लिए PHP के अपने संस्करण के लिए E_ALL (Gumbo द्वारा उल्लिखित) के मूल्य का उपयोग करने पर विचार करना चाह सकते हैं। और जानकारी
3 अन्य आइटम: (1) आप त्रुटि लॉग फ़ाइल की जांच कर सकते हैं क्योंकि इसमें सभी त्रुटियां होंगी (जब तक कि लॉगिंग को अक्षम नहीं किया गया है)। (2) निम्नलिखित 2 पंक्तियों को जोड़ने से आपको उन त्रुटियों को डीबग करने में मदद मिलेगी जो वाक्यविन्यास त्रुटियाँ नहीं हैं:
error_reporting(-1);
ini_set('display_errors', 'On');
(3) एक अन्य विकल्प एक संपादक का उपयोग करना है जो आपके टाइप करते समय त्रुटियों की जांच करता है, जैसे कि PhpEd । PhpEd एक डिबगर के साथ भी आता है जो अधिक विस्तृत जानकारी प्रदान कर सकता है। (PhpEd डीबगर xdebug से बहुत मिलता-जुलता है और सीधे संपादक में एकीकृत होता है, इसलिए आप सब कुछ करने के लिए 1 का उपयोग करते हैं।)
कार्टमैन का लिंक भी बहुत अच्छा है:http://www.ibm.com/developerworks/library/os-debug/
निम्नलिखित सभी त्रुटियों को सक्षम करता है:
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);
निम्न लिंक भी देखें
- http://php.net/manual/en/errorfunc.configuration.php#ini.display-errors
- http://php.net/manual/en/errorfunc.configuration.php#ini.display-startup-errors
- http://php.net/manual/en/function.error-reporting.php
निम्नलिखित कोड को सभी त्रुटियों को प्रदर्शित करना चाहिए:
<?php
// ----------------------------------------------------------------------------------------------------
// - Display Errors
// ----------------------------------------------------------------------------------------------------
ini_set('display_errors', 'On');
ini_set('html_errors', 0);
// ----------------------------------------------------------------------------------------------------
// - Error Reporting
// ----------------------------------------------------------------------------------------------------
error_reporting(-1);
// ----------------------------------------------------------------------------------------------------
// - Shutdown Handler
// ----------------------------------------------------------------------------------------------------
function ShutdownHandler()
{
if(@is_array($error = @error_get_last())) { return(@call_user_func_array('ErrorHandler', $error));
};
return(TRUE);
};
register_shutdown_function('ShutdownHandler');
// ----------------------------------------------------------------------------------------------------
// - Error Handler
// ----------------------------------------------------------------------------------------------------
function ErrorHandler($type, $message, $file, $line)
{
$_ERRORS = Array( 0x0001 => 'E_ERROR', 0x0002 => 'E_WARNING', 0x0004 => 'E_PARSE', 0x0008 => 'E_NOTICE', 0x0010 => 'E_CORE_ERROR', 0x0020 => 'E_CORE_WARNING', 0x0040 => 'E_COMPILE_ERROR', 0x0080 => 'E_COMPILE_WARNING', 0x0100 => 'E_USER_ERROR', 0x0200 => 'E_USER_WARNING', 0x0400 => 'E_USER_NOTICE', 0x0800 => 'E_STRICT', 0x1000 => 'E_RECOVERABLE_ERROR', 0x2000 => 'E_DEPRECATED', 0x4000 => 'E_USER_DEPRECATED' ); if(!@is_string($name = @array_search($type, @array_flip($_ERRORS))))
{
$name = 'E_UNKNOWN'; }; return(print(@sprintf("%s Error in file \xBB%s\xAB at line %d: %s\n", $name, @basename($file), $line, $message))); }; $old_error_handler = set_error_handler("ErrorHandler");
// other php code
?>
इस कोड के साथ एक खाली पृष्ठ उत्पन्न करने का एकमात्र तरीका है जब आपके पास शटडाउन हैंडलर में कोई त्रुटि हो। मैंने इसे परीक्षण किए बिना अपने स्वयं के सेमी से कॉपी और पेस्ट किया, लेकिन मुझे यकीन है कि यह काम करता है।
आप उस फ़ाइल में निम्न पंक्तियों को शामिल कर सकते हैं जिसे आप डीबग करना चाहते हैं:
error_reporting(E_ALL);
ini_set('display_errors', '1');
यह php.ini में डिफ़ॉल्ट सेटिंग्स को ओवरराइड करता है, जो बस PHP की रिपोर्ट को लॉग में त्रुटियों को बनाते हैं।
त्रुटियों और चेतावनियों को आम तौर पर में दिखाई देते हैं ....\logs\php_error.log
या ....\logs\apache_error.log
अपने php.ini सेटिंग के आधार पर।
साथ ही उपयोगी त्रुटियों को अक्सर ब्राउज़र पर निर्देशित किया जाता है, लेकिन जैसा कि वे मान्य HTML नहीं हैं वे प्रदर्शित नहीं होते हैं।
तो "tail -f
"आपकी लॉग फाइलें और जब आपको रिक्त स्क्रीन का उपयोग IEs" दृश्य "->" स्रोत "मेनू में कच्चे आउटपुट को देखने के लिए होता है।
PHP विन्यास
Php.ini में 2 प्रविष्टियाँ त्रुटियों के आउटपुट को निर्धारित करती हैं:
- display_errors
- error_reporting
में उत्पादन , display_errors
आम तौर पर करने के लिए सेट कर दिया जाता Off
(जो, एक अच्छी बात है क्योंकि उत्पादन साइटों में त्रुटि प्रदर्शन आम तौर पर वांछनीय नहीं है!)।
हालाँकि, विकास में , इसे सेट किया जाना चाहिए On
, ताकि त्रुटियां प्रदर्शित हों। जाँच करें !
error_reporting
(PHP 5.3 के रूप में) डिफ़ॉल्ट रूप से सेट किया गया है E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
(मतलब, नोटिस, सख्त मानकों और पदावनति नोटिस के अलावा सब कुछ दिखाया गया है)। जब संदेह हो, तो सभी त्रुटियों E_ALL
को प्रदर्शित करने के लिए इसे सेट करें । जाँच करें !
वाह रे वाह! कोई जाँच नहीं! मैं अपना php.ini नहीं बदल सकता!
कि एक शर्म की बात है। आमतौर पर साझा किए गए होस्ट अपनी php.ini फ़ाइल को बदलने की अनुमति नहीं देते हैं, और इसलिए, यह विकल्प दुखद रूप से अनुपलब्ध है। लेकिन डर नहीं! हमारे पास अन्य विकल्प हैं !
रनटाइम कॉन्फ़िगरेशन
वांछित स्क्रिप्ट में, हम php.ini प्रविष्टियों को रनटाइम में बदल सकते हैं! मतलब, जब स्क्रिप्ट चलेगी तो यह चलेगा! मिठाई!
error_reporting(E_ALL);
ini_set("display_errors", "On");
ये दोनों लाइनें php.ini प्रविष्टियों को ऊपर के रूप में बदलने के रूप में एक ही प्रभाव डालेंगी! बहुत बढ़िया!
मुझे अभी भी एक खाली पृष्ठ / 500 त्रुटि मिलती है!
इसका मतलब है कि स्क्रिप्ट भी नहीं चली थी! यह आमतौर पर तब होता है जब आपके पास सिंटैक्स त्रुटि होती है!
सिंटैक्स त्रुटियों के साथ, स्क्रिप्ट रनटाइम के लिए भी नहीं मिलती है। यह संकलन समय पर विफल हो जाता है , जिसका अर्थ है कि यह php.ini में उन मूल्यों का उपयोग करेगा, जिन्हें यदि आपने नहीं बदला है, तो त्रुटियों के प्रदर्शन की अनुमति नहीं दी जा सकती है।
त्रुटि लॉग
इसके अलावा, डिफ़ॉल्ट रूप से PHP त्रुटि लॉग करता है। साझा होस्टिंग में, यह एक समर्पित फ़ोल्डर में हो सकता है या आपत्तिजनक स्क्रिप्ट के समान फ़ोल्डर में हो सकता है।
यदि आपके पास php.ini तक पहुंच है, तो आप इसे error_logप्रविष्टि के तहत पा सकते हैं ।
मैं हमेशा php स्क्रिप्ट के शीर्ष पर इस वाक्यविन्यास का उपयोग कर रहा हूं।
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On'); //On or Off
वास्तव में " xdebug " नामक एक उपयोगी एक्सटेंशन है जो आपकी रिपोर्ट को बहुत अच्छा बना देगा।
त्वरित रूप से, समस्या निवारण के लिए, मैं आमतौर पर SO पर यहाँ सुझाव देता हूं:
error_reporting(~0); ini_set('display_errors', 1);
उस स्क्रिप्ट की शुरुआत में रखा जाए, जो परेशानी में है। यह सही नहीं है, सही संस्करण यह है कि आप php.ini
सिंटैक्स और स्टार्टअप त्रुटियों को पकड़ने के लिए PHP में त्रुटियों को लॉग इन करने के लिए भी सक्षम करते हैं।
यहां उल्लिखित सेटिंग्स सभी त्रुटियों, सूचनाओं और चेतावनियों को प्रदर्शित करती हैं, जिनमें सख्त भी शामिल हैं, चाहे जो भी PHP संस्करण हो।
अगली बातों पर विचार करें:
- Xdebug स्थापित करें और अपने IDE के साथ दूरस्थ डिबगिंग सक्षम करें ।
साथ ही देखें:
- त्रुटि रिपोर्टिंग (PHP सही तरीका।)
- पूर्वनिर्धारित स्थिरांक डॉक्स
- error_reporting()डॉक्स
- display_errorsडॉक्स
अंतिम त्रुटि या चेतावनी को दृश्यमान बनाने के लिए हुक दर्ज करना संभव है।
function shutdown(){
var_dump(error_get_last());
}
register_shutdown_function('shutdown');
इस कोड को आप की शुरुआत में जोड़कर index.php आपको समस्याओं को डीबग करने में मदद करेगा।
यदि आप सुपर कूल हैं, तो आप कोशिश कर सकते हैं:
$test_server = $_SERVER['SERVER_NAME'] == "127.0.0.1" || $_SERVER['SERVER_NAME'] == "localhost" || substr($_SERVER['SERVER_NAME'],0,3) == "192";
ini_set('display_errors',$test_server);
error_reporting(E_ALL|E_STRICT);
यह केवल त्रुटियों को प्रदर्शित करेगा जब आप स्थानीय रूप से चल रहे हैं। यह आपको अन्य स्थानों पर परीक्षण करने के लिए test_server वैरिएबल भी देता है, जहाँ उपयुक्त हो।
स्क्रिप्ट रन से पहले होने वाली कोई भी त्रुटि नहीं पकड़ी जाएगी, लेकिन 99% त्रुटियों के लिए जो मैं करता हूं, यह एक मुद्दा नहीं है।
पृष्ठ के शीर्ष पर एक पैरामीटर चुनें
error_reporting(E_ERROR | E_WARNING | E_PARSE);
यह लोडेड बनाम रनटाइम कॉन्फ़िगरेशन की समस्या है
यह समझना महत्वपूर्ण है कि संकलित त्रुटि या पार्स त्रुटि संकलन या पार्सिंग चरण के दौरान होती है , जिसका अर्थ है कि 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 के स्टॉक इंस्टॉलेशन) एक उत्पादन-ini फ़ाइल का उपयोग करेंगे display_errors
, जो डिफ़ॉल्ट रूप से बंद हो गया है, जो आमतौर पर आपके द्वारा यहां अनुभव की गई उसी निराशा के परिणामस्वरूप होता है। क्योंकि PHP पहले ही बंद हो गई है जब यह शुरू होता है, तो एक सिंटैक्स या पार्स त्रुटि का सामना करता है, और आउटपुट के बिना कुछ भी नहीं होता है। आप उम्मीद करते हैं कि आपके ini_set('display_errors',1);
PHP स्क्रिप्ट के शीर्ष पर रहने से आपको बचना चाहिए था, लेकिन इससे कोई फर्क नहीं पड़ता कि क्या PHP आपके कोड को पार्स नहीं कर सकता क्योंकि यह रनटाइम तक कभी नहीं पहुंचेगा।
इसे जारी रखने और इसे औपचारिक बनाने के लिए, आप अपनी php.ini फ़ाइल को संपादित कर सकते हैं। यह आमतौर पर में संग्रहित है /etc/php.ini
या /etc/php/php.ini
है, लेकिन अधिक स्थानीय php.ini
की यह ओवरराइट कर सकता है, अपने होस्टिंग प्रदाता के सेटअप के दिशा-निर्देशों के आधार पर। शीर्ष पर एक phpinfo()
फ़ाइल की जाँच करें Loaded Configuration File
, यह सुनिश्चित करने के लिए कि कौन सा अंतिम लोड किया गया है।
उस फ़ाइल में display_errors खोजें। केवल 3 उदाहरण होने चाहिए, जिनमें से 2 पर टिप्पणी की गई है।
अधूरी रेखा को इसमें बदलें:
display_errors = stdout
अगर यह मदद करेगा, लेकिन यह मेरी परियोजनाओं के लिए मानक विन्यास फाइल का एक टुकड़ा है। मैं अपने सर्वर पर भी अपाचे कॉन्फिग पर बहुत अधिक निर्भर नहीं हूं।
मुझे कभी भी गायब होने की समस्या नहीं है, इसलिए शायद यहाँ कुछ आपको एक विचार देगा।
APPLICATON_LIVE दिखाने के लिए संपादित किया गया
/*
APPLICATION_LIVE will be used in process to tell if we are in a development or production environment. It's generally set as early as possible (often the first code to run), before any config, url routing, etc.
*/
if ( preg_match( "%^(www.)?livedomain.com$%", $_SERVER["HTTP_HOST"]) ) {
define('APPLICATION_LIVE', true);
} elseif ( preg_match( "%^(www.)?devdomain.net$%", $_SERVER["HTTP_HOST"]) ) {
define('APPLICATION_LIVE', false);
} else {
die("INVALID HOST REQUEST (".$_SERVER["HTTP_HOST"].")");
// Log or take other appropriate action.
}
/*
--------------------------------------------------------------------
DEFAULT ERROR HANDLING
--------------------------------------------------------------------
Default error logging. Some of these may be changed later based on APPLICATION_LIVE.
*/
error_reporting(E_ALL & ~E_STRICT);
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");
ini_set ( "log_errors", 1);
ini_set ( "log_errors_max_len", 0);
ini_set ( "error_log", APPLICATION_ROOT."logs/php_error_log.txt");
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");
if ( ! APPLICATION_LIVE ) {
// A few changes to error handling for development.
// We will want errors to be visible during development.
ini_set ( "display_errors", "1");
ini_set ( "display_startup_errors", "1");
ini_set ( "html_errors", "1");
ini_set ( "docref_root", "http://www.php.net/");
ini_set ( "error_prepend_string", "<div style='color:red; font-family:verdana; border:1px solid red; padding:5px;'>");
ini_set ( "error_append_string", "</div>");
}
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
ini_set('html_errors', 1);
इसके अलावा, आप xdebug के साथ अधिक विस्तृत जानकारी प्राप्त कर सकते हैं ।
मैं PHP में त्रुटियों और अपवादों के बेहतर दृश्य के लिए नेट्टे ट्रेसी की सलाह देता हूं :
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
error_reporting(E_ALL | E_STRICT);
और php.ini में प्रदर्शन त्रुटियों को चालू करें
आप PHP में अपना खुद का एरर हैंडलर रजिस्टर कर सकते हैं । एक फ़ाइल में सभी त्रुटियों को डंप करना आपको इन अस्पष्ट मामलों में मदद कर सकता है, उदाहरण के लिए। ध्यान दें कि आपके फ़ंक्शन को बुलाया जाएगा, इससे कोई फर्क नहीं पड़ता कि आपकी वर्तमान error_reporting किस पर सेट है। बहुत बुनियादी उदाहरण:
function dump_error_to_file($errno, $errstr) {
file_put_contents('/tmp/php-errors', date('Y-m-d H:i:s - ') . $errstr, FILE_APPEND);
}
set_error_handler('dump_error_to_file');
पीएचपी से उपयोगी त्रुटियां प्राप्त करने के लिए आपको जिन दो प्रमुख लाइनों की आवश्यकता है, वे हैं:
ini_set('display_errors',1);
error_reporting(E_ALL);
जैसा कि अन्य योगदानकर्ताओं द्वारा बताया गया है, इन्हें सुरक्षा कारणों से डिफ़ॉल्ट रूप से बंद कर दिया जाता है। एक उपयोगी टिप के रूप में - जब आप अपनी साइट सेट कर रहे होते हैं तो अपने विभिन्न परिवेशों के लिए एक स्विच करना आसान होता है ताकि ये त्रुटियां आपके स्थानीय और विकास वातावरण में डिफ़ॉल्ट रूप से चालू रहें। यह निम्नलिखित कोड के साथ प्राप्त किया जा सकता है (आदर्श रूप से आपके index.php या कॉन्फ़िगर फ़ाइल में तो यह शुरू से सक्रिय है):
switch($_SERVER['SERVER_NAME'])
{
// local
case 'yourdomain.dev':
// dev
case 'dev.yourdomain.com':
ini_set('display_errors',1);
error_reporting(E_ALL);
break;
//live
case 'yourdomain.com':
//...
break;
}
FirePHP उपयोगी भी हो सकता है।
अपने php.ini को खोलें, सुनिश्चित करें कि यह इसके लिए सेट है:
display_errors = On
अपने सर्वर को पुनरारंभ करें।
आप अपने कोड संपादक के रूप में PHPStorm भी आज़माना चाह सकते हैं। जैसा कि आप संपादक में टाइप कर रहे हैं, यह कई PHP और अन्य वाक्यविन्यास त्रुटियों को सही पाएगा।
यदि आप एक ubuntu उपयोगकर्ता हैं, तो अपने टर्मिनल को गोटो और इस कमांड को चलाएं
sudo tail -50f /var/log/apache2/error.log
जहां यह हाल की 50 त्रुटियों को प्रदर्शित करेगा। error.log
Apache2 के लिए एक त्रुटि फ़ाइल है जो सभी त्रुटियों को लॉग करती है।
पूर्ण त्रुटि रिपोर्टिंग चालू करने के लिए, इसे अपनी स्क्रिप्ट में जोड़ें:
error_reporting(E_ALL);
यह दिखाने के लिए भी कम से कम चेतावनी देता है। और, बस मामले में:
ini_set('display_errors', '1');
त्रुटियों के प्रदर्शन को मजबूर करेगा। इसे उत्पादन सर्वरों में बंद कर दिया जाना चाहिए, लेकिन जब आप विकास कर रहे हों तो नहीं।
डेवलपर्स के लिए उनकी गलतियों को जानने के लिए "ERRORS" सबसे उपयोगी चीजें हैं और सिस्टम को सही काम करने के लिए उन्हें हल किया।
PHP डेवलपर्स को यह जानने के लिए कुछ बेहतर तरीके प्रदान करता है कि उनके कोड को क्यों और कहां से त्रुटियां मिल रही हैं, इसलिए उन त्रुटियों को जानकर डेवलपर्स अपने कोड को कई तरीकों से बेहतर बना सकते हैं।
सभी त्रुटि संदेश प्राप्त करने के लिए स्क्रिप्ट के शीर्ष पर निम्नलिखित दो पंक्तियों को लिखने के सर्वोत्तम तरीके:
error_reporting(E_ALL);
ini_set("display_errors", 1);
अपने IDE में xdebug जैसे डिबगर टूल का उपयोग करने का दूसरा तरीका ।
आप पूर्ण त्रुटि रिपोर्टिंग (नोटिस और सख्त संदेश सहित) सक्षम कर सकते हैं। कुछ लोगों को यह बहुत अधिक लगता है, लेकिन यह एक कोशिश के काबिल है। सेट error_reporting
करने के लिए E_ALL | E_STRICT
अपने php.ini में।
error_reporting = E_ALL | E_STRICT
E_STRICT
आपको पदावनत कार्यों के बारे में सूचित करेगा और आपको कुछ कार्य करने के सर्वोत्तम तरीकों के बारे में सिफारिशें देगा।
यदि आप नोटिस नहीं चाहते हैं, लेकिन आपको अन्य संदेश प्रकार सहायक लगते हैं, तो नोटिस को छोड़कर देखें:
error_reporting = (E_ALL | E_STRICT) & ~E_NOTICE
यह भी सुनिश्चित करें कि display_errors
php.ini में सक्षम है। यदि आपका PHP संस्करण 5.2.4 से पुराना है, तो इसे On
निम्न पर सेट करें :
display_errors = "On"
यदि आपका संस्करण 5.2.4 या नया है, तो उपयोग करें:
display_errors = "stderr"
Error_reporting और display_errors ini सेटिंग के अलावा, आप अपने वेब सर्वर की लॉग फ़ाइलों से SYNTAX त्रुटियां प्राप्त कर सकते हैं। जब मैं PHP विकसित कर रहा हूं तो मैं अपने संपादक में अपने सिस्टम सिस्टम के वेब सर्वर लॉग लोड करता हूं। जब भी मैं किसी पृष्ठ का परीक्षण करता हूं और एक रिक्त स्क्रीन प्राप्त करता हूं, तो लॉग फ़ाइल बासी हो जाती है और मेरा संपादक पूछता है कि क्या मैं इसे फिर से लोड करना चाहता हूं। जब मैं करता हूं, मैं नीचे कूदता हूं और वाक्यविन्यास त्रुटि होती है। उदाहरण के लिए:
[Sun Apr 19 19:09:11 2009] [error] [client 127.0.0.1] PHP Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in D:\\webroot\\test\\test.php on line 9
उन लोगों के लिए जो नगीनेक्स का उपयोग करते हैं और फ़ाइल के साथ एक सफेद स्क्रीन भी रखते हैं <?php echo 123;
। मेरे मामले में मेरे पास nginx config फाइल में PHP के लिए यह आवश्यक विकल्प नहीं था:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
यह विकल्प fastcgi_params फ़ाइल में नहीं था, इसलिए PHP काम नहीं करती थी और लॉग में कोई त्रुटि नहीं थी।