【发布时间】:2010-12-22 23:12:06
【问题描述】:
我需要一个解决方案来捕获所有 PHP 致命错误、异常、警告等并进行回调。
我想向用户显示错误的友好版本并记录该错误。
我正在考虑每天使用一个文本文件来记录错误。
有什么建议或 PHP 类(库)吗?
【问题讨论】:
标签: php error-handling
我需要一个解决方案来捕获所有 PHP 致命错误、异常、警告等并进行回调。
我想向用户显示错误的友好版本并记录该错误。
我正在考虑每天使用一个文本文件来记录错误。
有什么建议或 PHP 类(库)吗?
【问题讨论】:
标签: php error-handling
php 方法:set_error_handler 可能就是你要找的。p>
更多信息:http://www.php.net/manual/en/function.set-error-handler.php
【讨论】:
这使得几乎所有错误都成为ErrorException 的可捕获实例:
set_error_handler(function($errno, $errstr, $errfile, $errline ){
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
});
在可能出现错误的代码之前使用它,例如在您的 php 文件的最顶部或包含的公共头文件中
限制:严重错误(PHP 引擎、服务器、语法)无法使用用户定义的函数处理: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() 解决此问题
【讨论】:
set_error_handler 的用户定义错误处理程序来处理。见stackoverflow.com/questions/8527894/…
尝试启动此网页,您应该会看到“消息:除以零”。
// Set Error Handler
set_error_handler (
function($errno, $errstr, $errfile, $errline) {
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
);
// Trigger an exception in a try block
try {
$a = 3/0;
echo $a;
}
catch(Exception $e) {
echo 'Message: ' .$e->getMessage();
}
【讨论】:
从 PHP 7 开始,捕获所有异常的最佳方法是捕获 Throwable 接口,它“是可以通过 throw 语句抛出的任何对象的基本接口”。所以你的代码看起来像这样。
try {
# code...
} catch (\Throwable $th) {
# code...
}
【讨论】:
我非常喜欢 kohana 框架的错误处理。不过,您必须做一些工作才能将其拔出。
它将允许您对文件进行错误记录并通过电子邮件发送给收件人。它还使您能够重定向到友好的错误页面。
【讨论】: