PHP捕捉錯誤

darry發表於2019-01-19

PHP捕捉錯誤

  • 禁止錯誤輸出
error_reporting(0);
  • 設定錯誤處理器
set_error_handler(`errorHandler`);
  • 在指令碼結束時執行的函式
register_shutdown_function(`fatalErrorHandler`);
  • 錯誤處理
/**
 * @param int    $err_no      錯誤程式碼
 * @param string $err_msg  錯誤資訊
 * @param string $err_file    錯誤檔案
 * @param int    $err_line     錯誤行號
 * @return string
 */
function errorHandler($err_no = 0, $err_msg = ``, $err_file = ``, $err_line = 0)
{
    $log = [
        `[`.date(`Y-m-d h-i-s`).`]`,
        `|`,
        $err_no,
        `|`,
        $err_msg,
        `|`,
        $err_file,
        `|`,
        $err_line
    ];
    $log_path = `./test.txt`;
    error_log(implode(` `,$log)."
",3, $log_path);
}
  • 捕捉致命錯誤
function fatalErrorHandler() {
    $e = error_get_last();

    var_export($e);
    switch ($e[`type`]) {
        case 1:
            errorHandler($e[`type`], $e[`message`], $e[`file`], $e[`line`]);
            break;
    }
}
class DemoClass_1
{
    public function index()
    {
        //這裡發生一個警告錯誤,出發errorHandler
        echo $undefinedVarible;
    }
}
  • 這裡發生一個警告錯誤,被errorHandler 捕獲
$demo_1 = new DemoClass_1();
$demo_1->index();
  • 發生致命錯誤,指令碼停止執行觸發 fatalErrorHandler
$demo_2 = new DemoClass_2();
$demo_2->index();

開啟test.txt後 輸出:

[2018-06-12 05-49-11] | 8 | Undefined variable: undefinedVarible | /Users/darry/htdocs/test.php | 57
[2018-06-12 05-49-11] | 1 | Uncaught Error: Class `DemoClass_2` not found in /Users/darry/htdocs/test.php:67
Stack trace:
#0 {main}
  thrown | /Users/darry/htdocs/test.php | 67

相關文章