खोज…


त्रुटि रिपोर्टिंग सेट करना और उन्हें कहां प्रदर्शित करना है

यदि यह पहले से ही php.ini में नहीं किया गया है, तो त्रुटि रिपोर्टिंग को गतिशील रूप से सेट किया जा सकता है और इसे अधिकांश त्रुटियों को दिखाने की अनुमति देने के लिए सेट किया जाना चाहिए:

वाक्य - विन्यास

int error_reporting ([ int $level ] )

उदाहरण

// should always be used prior to 5.4
error_reporting(E_ALL);

// -1 will show every possible error, even when new levels and constants are added 
// in future PHP versions. E_ALL does the same up to 5.4.
error_reporting(-1);

// without notices
error_reporting(E_ALL & ~E_NOTICE);

// only warnings and notices.
// for the sake of example, one shouldn't report only those
error_reporting(E_WARNING | E_NOTICE);

त्रुटियों को डिफ़ॉल्ट रूप से php द्वारा लॉग किया जाएगा, सामान्य रूप से रनिंग स्क्रिप्ट की तुलना में उसी स्तर पर एक एरर.लॉग फ़ाइल में।

विकास के माहौल में, कोई भी उन्हें स्क्रीन पर दिखा सकता है:

ini_set('display_errors', 1);

उत्पादन में हालांकि, एक चाहिए

ini_set('display_errors', 0);

और एक अपवाद या त्रुटि हैंडलर के उपयोग के माध्यम से एक अनुकूल समस्या संदेश दिखाएं।

अपवाद और त्रुटि से निपटने

पकड़ने की कोशिश

try..catch ब्लॉकों का उपयोग किसी प्रोग्राम के प्रवाह को नियंत्रित करने के लिए किया जा सकता है, जहां अपवाद फेंके जा सकते हैं। जब उन्हें सामना करना पड़ता है तो PHP को रोकने की बजाय उन्हें इनायत से पकड़ा और संभाला जा सकता है:

try {
    // Do a bunch of things...
    throw new Exception('My test exception!');
} catch (Exception $ex) {
    // Your logic failed. What do you want to do about that? Log it:
    file_put_contents('my_error_log.txt', $ex->getMessage(), FILE_APPEND);
}

उपरोक्त उदाहरण try ब्लॉक में फेंके गए अपवाद को catch लेगा और उसे एक पाठ फ़ाइल में संदेश ("मेरा परीक्षण अपवाद!") लॉग कर देगा।

विभिन्न अपवाद प्रकारों को पकड़ना

आप विभिन्न प्रकार के अपवादों को विभिन्न तरीकों से नियंत्रित करने के लिए कई catch स्टेटमेंट लागू कर सकते हैं, उदाहरण के लिए:

try {
    throw new InvalidArgumentException('Argument #1 must be an integer!');
} catch (InvalidArgumentException $ex) {
    var_dump('Invalid argument exception caught: ' . $ex->getMessage());
} catch (Exception $ex) {
    var_dump('Standard exception caught: ' . $ex->getMessage());
}

उपरोक्त उदाहरण में पहले catch का उपयोग किया जाएगा क्योंकि यह निष्पादन के क्रम में पहले से मेल खाता है। यदि आप catch स्टेटमेंट के ऑर्डर को चारों ओर स्वैप करते हैं, तो Exception कैचर पहले निष्पादित करेगा।

इसी तरह, यदि आप एक UnexpectedValueException Exception को फेंकने के बजाय एक मानक Exception लिए दूसरे हैंडलर का उपयोग करते हुए देखेंगे।

आखिरकार

यदि आपको किसी try बाद कुछ करने की जरूरत है या एक catch पूरी हो गई है, तो आप finally कथन का उपयोग कर सकते हैं:

try {
    throw new Exception('Hello world');
} catch (Exception $e) {
    echo 'Uh oh! ' . $e->getMessage();
} finally {
    echo " - I'm finished now - home time!";
}

उपरोक्त उदाहरण निम्नलिखित उत्पादन करेगा:

उह ओह! नमस्ते दुनिया - मैं अब समाप्त हो गया हूं - घर का समय!

फेंकने योग्य

PHP 7 में हम Throwable इंटरफ़ेस की शुरूआत देखते हैं, जिसमें Error और साथ ही Exception लागू होते हैं। यह PHP 7 में अपवादों के बीच एक सेवा अनुबंध स्तर जोड़ता है, और आपको अपने स्वयं के कस्टम अपवादों के लिए इंटरफ़ेस को लागू करने की अनुमति देता है:

$handler = function(\Throwable $ex) {
    $msg = "[ {$ex->getCode()} ] {$ex->getTraceAsString()}";
    mail('[email protected]', $ex->getMessage(), $msg);
    echo myNiceErrorMessageFunction();
};
set_exception_handler($handler);
set_error_handler($handler);

PHP 7 से पहले आप बस टाइप कर सकते हैं Exception रूप में PHP 5 के बाद से सभी अपवाद वर्ग इसे विस्तारित करते हैं।

घातक त्रुटियों को लॉग करना

PHP में, एक घातक त्रुटि एक प्रकार की त्रुटि है जिसे पकड़ा नहीं जा सकता है, अर्थात एक घातक त्रुटि का अनुभव करने के बाद एक कार्यक्रम फिर से शुरू नहीं होता है। हालांकि, इस त्रुटि लॉग इन करने या किसी भी तरह दुर्घटना आप उपयोग कर सकते हैं संभाल register_shutdown_function बंद हैंडलर रजिस्टर करने के लिए।

function fatalErrorHandler() {
    // Let's get last error that was fatal.
    $error = error_get_last();
   
    // This is error-only handler for example purposes; no error means that
    // there were no error and shutdown was proper. Also ensure it will handle 
    // only fatal errors.
    if (null === $error || E_ERROR != $error['type']) {
        return;
    }

    // Log last error to a log file.
    // let's naively assume that logs are in the folder inside the app folder.
    $logFile = fopen("./app/logs/error.log", "a+");

    // Get useful info out of error.
    $type    = $error["type"];
    $file    = $error["file"];
    $line    = $error["line"];
    $message = $error["message"]

    fprintf(
        $logFile,
        "[%s] %s: %s in %s:%d\n",
        date("Y-m-d H:i:s"),
        $type,        
        $message,
        $file, 
        $line);

    fclose($logFile);       
}


register_shutdown_function('fatalErrorHandler');

संदर्भ:



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow