set_error_handler()不适用于FATAL错误

dyn*_*mic 11 php error-handling fatal-error

我有一个简单的自定义错误处理程序,它在错误日志文件中写入一些有用的调试信息.

它适用于所有内容,但它不会因为FATAL错误而被触发.

有办法解决这个问题吗?

目前为了绕过这种情况,我已经注册了一个关闭功能,检查 error_get_last()

ale*_*lex 20

不,这只是一个限制set_error_handler(); 它不处理所有错误.

下面的错误类型不能与用户定义的函数来处理: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()是一个体面的解决办法.


Thi*_*ter 5

只有通过hackish方法来解决它,例如通过使用register_shutdown_function()然后检查该函数内是否发生错误.

PHP有log_errors一个原因,你可以让PHP记录任何错误到syslog或日志文件没有一行自定义代码.因此set_error_handler(),根本不需要使用此目的,除非您需要例如堆栈跟踪,否则应该避免使用.