1

我一直在网上搜索,试图找到一种方法来捕获 PHP (5.3) 引发的所有错误

我一直在阅读文档,它看起来set_error_handler是我需要的,但它不会出现致命/解析错误。我不确定这是否可能......

这是我的来源:https ://github.com/tarnfeld/PHP-Error-Handler 如果您知道更好的解决方案,请随时 fork/commit。

先谢谢了!

更新!

使用下面的答案,我完成了一个错误处理程序,它负责 E_ERROR|E_PARSE|E_WARNING|E_NOTICE 并在脚本致命时终止脚本!:-)

4

5 回答 5

4

引用手册:

以下错误类型不能用用户定义的函数处理:E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, 和大部分在调用E_STRICT的文件中引发。set_error_handler()

这意味着无法捕获和处理致命事件。您可以做的是设置一个额外的处理程序,以便在脚本退出时运行,例如register_shutdown_function.

在该处理程序中,使用error_get_last并检查它是否是致命错误。但是,这将不允许您继续执行脚本。该脚本将结束,但您可以进行任何清理或日志记录(通常致命事件将被记录到 error.log 中)或其他任何内容。

下面的评论中有一个用户提供的示例set_error_handler

register_shutdown_function('shutdownFunction');
function shutDownFunction() {
    $error = error_get_last();
    if ($error['type'] == 1) {
        //do your stuff    
    }
}

但请注意,这仍然只会捕获某些额外的运行时错误。

于 2010-12-14T11:46:09.173 回答
2

So called "fatal errors" is perhaps the most annoying bug in php. The best we can do about it is to convince "php group" to recognize this bug as such, by voting for this request http://bugs.php.net/bug.php?id=28331.

As long as this is not fixed, we're doomed to use dirty hacks like shutdown error handlers or autoloads.

于 2010-12-14T12:04:31.597 回答
2

你可以关注一下error_log。在 Ubuntu 中,它位于/var/log/apache2/error_log

于 2010-12-14T11:44:10.673 回答
0

如果您想捕获致命错误(包括解析错误),最好的解决方案是在 php.ini 文件中设置 error_logging,例如

display_errors = Off
log_errors = On
ignore_repeated_errors = Off
ignore_repeated_source = Off
于 2010-12-14T11:48:11.680 回答
0

不,不可能捕获致命错误和解析错误。解析错误,因为它们是在脚本编译之前引发的。致命错误,因为它们是......致命的(即脚本在遇到它们后无法继续运行)

于 2010-12-14T11:40:51.637 回答