set_error_handler() 不适用于致命错误

2022-08-31 00:33:51

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

它适用于所有事情,但它不会因致命错误而被触发。

有什么办法解决这个问题吗?

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


答案 1

不,这只是set_error_handler()的限制;它不能处理所有错误。

以下错误类型无法使用用户定义的函数进行处理:、、、和调用的文件中引发的大多数错误类型。E_ERRORE_PARSEE_CORE_ERRORE_CORE_WARNINGE_COMPILE_ERRORE_COMPILE_WARNINGE_STRICTset_error_handler()

register_shutdown_function()error_get_last() 是一个不错的解决方法。


答案 2

只有黑客的方法可以解决它,例如通过使用然后检查该函数内部是否发生错误。register_shutdown_function()

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


推荐