WithCoderWithCoderWithCoder

PHP函数register_shutdown_function和捕获致命错误

在PHP中,使用try,catch是没法捕捉到错误的。不过可以使用 register_shutdown_function 这个方法,它会在PHP进程结束前会去调用它一次,配合  error_get_last(这个方法顾名思义,返回最后一次错误)可以很好的捕获致命错误。

语法说明:

register_shutdown_function( callable $callback [, mixed $parameter [, mixed $... ]] ) : void

注册一个会在php中止时执行的函数。注册一个中止回调 callback ,中止回调是作为请求的一部分被执行的,因此可以在它们中进行输出或者读取输出缓冲区它会在脚本执行完成或者 exit() 后被调用。

另外,可以多次调用 register_shutdown_function() ,这些被注册的回调会按照他们注册时的顺序被依次调用。 如果你在注册的方法内部调用 exit(), 那么所有处理会被中止,并且其他注册的中止回调也不会再被调用。

error_get_last ( void ) : array

error_get_last方法可以获取最后发生的错误,它返回了一个以type(错误类型),message(错误消息),file(发生错误所在的文件),line(发生错误所在的行)为键的关联数组,描述了最后错误的信息。如果没有错误则返回null。

举例如下:

<?php
// shutdown功能
register_shutdown_function('shutdown_function');
try {
   $a = new ClassA(); // 找不到ClassA会报致命错误
} catch (Exception $e) {
   print '获异常:' . $e->getMessage();
}

function shutdown_function()
{
   // 取最后一个发生的错误的信息
   $e = error_get_last();
   print_r($e);
}


欢迎分享交流,转载请注明出处:WithCoder » PHP函数register_shutdown_function和捕获致命错误