2011-12-15 51 views
8

我有一个简单的自定义错误处理程序,它在错误日志文件中写入一些有用的调试信息。set_error_handler()不能为FATAL错误工作

这是一切工作,但它不会被触发致命错误。

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

目前绕过这种情况下我已经注册了关断功能太多,检查error_get_last()

+4

[`以下错误类型不能与用户定义的函数处理:E_ERROR,E_PARSE,E_CORE_ERROR,E_CORE_WARNING,E_COMPILE_ERROR,E_COMPILE_WARNING,最E_STRICT的升高,其中的set_error_han dler()是called.`在文件中](HTTP: //us.php.net/set_error_handler) – animuson 2011-12-15 23:13:58

+1

这个问题错过了一个链接:[PHP的:自定义错误处理程序 - 处理解析和致命错误](http://stackoverflow.com/q/1900208/367456)。 – hakre 2012-06-22 10:43:33

回答

16

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

以下错误类型不能与用户定义的函数来处理:E_ERRORE_PARSEE_CORE_ERRORE_CORE_WARNINGE_COMPILE_ERRORE_COMPILE_WARNING,大部分E_STRICT其中set_error_handler()被称为在文件中提出的。

register_shutdown_function()error_get_last()是一个体面的解决方法。

+0

我们无法通过这种方式获取回溯... – Loenix 2016-01-12 17:05:14

4

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

PHP有log_errors是有原因的,你可以让PHP日志任何错误日志或日志文件而无需定制一行代码。因此,根本不需要使用set_error_handler()用于此目的,除非需要例如一个堆栈跟踪。

相关问题