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)."\r\n",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