我发现了很多关于包罗万象的错误处理实现的尝试,我想我可能会写一个 wiki 风格来提供我想出的完整解决方案。
问题是:
“如何捕获、处理或拦截 PHP 中的所有错误类型?”
现在 - 这可能被某些人视为“重写” - 但我不知道是否有人提出了全面的解决方案。
最佳答案
您需要三种错误处理程序:
set_exception_handler
, 以捕获任何其他未捕获的异常。set_error_handler
捕获“标准”PHP 错误。我喜欢先根据error_reporting
检查它,看看它是否是一个应该处理或忽略的错误(我通常忽略通知 - 可能不好,但这是我的选择),然后抛出一个ErrorException
,让异常处理程序捕获它以进行输出。register_shutdown_function
结合error_get_last
.检查['type']
的值以查看它是否是E_ERROR
、E_PARSE
或您想要捕获的基本上任何 fatal error 类型。这些通常会绕过set_error_handler
,因此在此处捕获它们可以让您捕获它们。同样,我倾向于只抛出一个ErrorException
,这样所有错误最终都会由同一个异常处理程序处理。
至于你如何实现这些,完全取决于你的代码是如何设置的。我通常执行 ob_end_clean()
来清除任何输出,并提供一个漂亮的错误页面,告诉他们错误已报告。
关于php - 我怎样才能捕获 PHP 中的所有错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27238473/