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