PHP自訂錯誤處理

小云云
發布: 2023-03-17 15:08:01
原創
2105 人瀏覽過

通常情況下,php會將致命錯誤直接輸出,會將錯誤的出處(檔案位址,行號)和原因等輸出,這樣,開發著可以很方便的定位到問題。但有些時候,可能由於 php.ini 的設定問題,或第三方框架配置的問題,導致這些資訊沒有輸出,那麼此時,必須學會自己設定相關參數,輸出這些錯誤訊息,幫助快速定位問題。

error_reporting 是一個php的全域設定參數,在php.ini。用於配置錯誤輸出級別,可以用來設定錯誤輸出的級別。

error_reporting(int $level),$level為0的時候是關閉錯誤輸出,也就是任何錯誤都不會輸出。

set_error_handler

php的預設錯誤處理是將訊息輸出。但是,有時候需要定義一些其他操作,這時就需要自訂錯誤處理函數。

php提供內建函數 set_error_handler 可以幫助我們註冊自己的錯誤處理函數。函數原型如下:

mixed set_error_handler ( callback $error_handler [, int $error_types = E_ALL | E_STRICT ] )

#值得注意的是,即使註冊了錯誤處理函數,預設的行為仍然會執行,也就是錯誤出現時,仍然會輸出錯誤訊息,所以需要在程式中顯示的將錯誤等級設為0,然後再註冊自己的錯誤處理函數。這種方式,在生產環境下,尤其重要,因為即使出錯,敏感內部錯誤訊息也不會暴露給潛在的惡意使用者。還有很重要的一點要指出,自訂錯誤處理函數不能處理 fatal error(例如編譯錯誤)。

下面是一個使用自訂錯誤處理函數的列子:

<?php
error_reporting(0);
function error_handler($error_level, $error_message, $file, $line) {
    $exit = false;
    switch ($error_level) {
        case E_NOTICE:
        case E_USER_NOTICE:
            $error_type = &#39;Notice&#39;;
            break;
        case E_WARNING:
        case E_USER_WARNING:
            $error_type = &#39;Warning&#39;;
            break;
        case E_ERROR:
        case E_USER_ERROR:
            $error_type = &#39;Fatal Error&#39;;
            $exit = true;
            break;
        default:
            $error_type = &#39;Unknown&#39;;
            $exit = true;
            break;
    }
    printf("%s: %s in %s on line %d\n", $error_type, $error_message, $file, $line);
    if ($exit) {
        die();
    }
}
set_error_handler(&#39;error_handler&#39;);
登入後複製

echo $novar;
echo 3 / 0;
trigger_error('Trigger a fatal error', E_USER_ERROR );
new NonExist();

執行此腳本可以得到下面的輸出:

Notice: Undefined variable: novar in /your/php_demo_file.php on line 40

Warning: Division by zero in /your/php_demo_file.php on line 41

Fatal Error: Trigger a fatal error in /your/php_demo_file.php on line 42

##都可以看到,最後的“new NoExistClass()”的異常,沒有被自訂的錯誤處理函數捕獲。

最後,捎帶提一下,set_exception_handler 註冊頂層的例外處理,在web一用中,可以設定一下,然後統一的跳到錯誤處理頁面。 ######以上就是PHP自訂錯誤處理的案例,希望能幫助大家。 ######相關推薦:#########php自訂函數實作陣列比較功能的案例############php自訂/系統/類別常數程式碼實例詳解############php自訂/系統/類別常數程式碼實例詳解######

以上是PHP自訂錯誤處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板