php - 我怎样才能捕获 PHP 中的所有错误?

标签 php error-handling custom-error-handling

我发现了很多关于包罗万象的错误处理实现的尝试,我想我可能会写一个 wiki 风格来提供我想出的完整解决方案。

问题是:

“如何捕获、处理或拦截 PHP 中的所有错误类型?”

现在 - 这可能被某些人视为“重写” - 但我不知道是否有人提出了全面的解决方案。

最佳答案

您需要三种错误处理程序:

  • set_exception_handler , 以捕获任何其他未捕获的异常。

  • set_error_handler捕获“标准”PHP 错误。我喜欢先根据 error_reporting 检查它,看看它是否是一个应该处理或忽略的错误(我通常忽略通知 - 可能不好,但这是我的选择),然后抛出一个 ErrorException,让异常处理程序捕获它以进行输出。

  • register_shutdown_function结合error_get_last .检查 ['type'] 的值以查看它是否是 E_ERRORE_PARSE 或您想要捕获的基本上任何 fatal error 类型。这些通常会绕过 set_error_handler,因此在此处捕获它们可以让您捕获它们。同样,我倾向于只抛出一个 ErrorException,这样所有错误最终都会由同一个异常处理程序处理。

至于你如何实现这些,完全取决于你的代码是如何设置的。我通常执行 ob_end_clean() 来清除任何输出,并提供一个漂亮的错误页面,告诉他们错误已报告。

关于php - 我怎样才能捕获 PHP 中的所有错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27238473/

相关文章:

ruby-on-rails - 使用 Rails 和 Postgres 时如何访问数据库错误信息

error-handling - Spring 集成 : How to send response packet to client in case of exception using error-channel?

java - 格式化自定义错误消息的基本问题

php - Symfony2 禁用选择

php - 'locals_id' 中的未知列 'where clause'

php - PHP中的错误处理。怎么做?

所有服务器的 nginx 错误位置

php - 使用 $.ajax 发送数据后如何从 $_POST 中获取数据

php - 防止带有 N 个子域的 Varnish 双缓存/仅用于 varnish 的规范化主机

javascript - 在 ES6 Node.js 中,如何让一个类随处可用?