我一直在网上搜索,试图找到一种方法来捕获PHP抛出的所有错误(5.3)
我一直在阅读文档,看起来set_error_handler
是我需要的,但它不会导致致命/解析错误。我不确定这是否可行......
以下是我的来源:https://github.com/tarnfeld/PHP-Error-Handler 如果你知道所有这些的更好的解决方案,请随意分叉/提交。
先谢谢!
使用下面的答案,我完成了error handler的编写,它会处理E_ERROR | E_PARSE | E_WARNING | E_NOTICE,并在死亡时杀死脚本! : - )
答案 0 :(得分:4)
引用手册:
使用用户定义的函数无法处理以下错误类型:
E_ERROR
,E_PARSE
,E_CORE_ERROR
,E_CORE_WARNING
,E_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