管理PHP错误

时间:2010-12-14 11:36:26

标签: php error-handling fatal-error parse-error

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

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

以下是我的来源:https://github.com/tarnfeld/PHP-Error-Handler 如果你知道所有这些的更好的解决方案,请随意分叉/提交。

先谢谢!

已更新!

使用下面的答案,我完成了error handler的编写,它会处理E_ERROR | E_PARSE | E_WARNING | E_NOTICE,并在死亡时杀死脚本! : - )

5 个答案:

答案 0 :(得分:4)

引用手册:

  

使用用户定义的函数无法处理以下错误类型:E_ERRORE_PARSEE_CORE_ERRORE_CORE_WARNINGE_COMPILE_ERROR,{{1} },以及调用E_COMPILE_WARNING的文件中引发的大多数E_STRICT

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

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

有一个user-supplied example in the comments below set_error_handler

set_error_handler()

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

答案 1 :(得分:2)

您可以留意error_log。在Ubuntu中,它位于/var/log/apache2/error_log

答案 2 :(得分:2)

所谓的“致命错误”可能是php中最烦人的错误。我们能做的最好的事情是通过投票支持这个请求来说服“php group”识别这个bug {。{3}}。

只要不修复,我们注定要使用关机错误处理程序或自动加载等脏黑客。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

display_errors = Off
log_errors = On
ignore_repeated_errors = Off
ignore_repeated_source = Off