1 回答
TA贡献1780条经验 获得超5个赞
首先,我必须警告您,在一个向公众开放的实时站点上,电子邮件错误可能会淹没您的邮箱,以防万一出现严重故障,因为对站点的每个请求都会导致发送一封不同的电子邮件。在我工作的公司中,这种情况不止一次发生过。有时很难在错误的瀑布中找到真正的原因。
监控服务器日志被认为是更安全和准确的解决方案。事实证明,在错误日志上使用 Grep 比浏览电子邮件更有效。但无论哪种方式,这里的问题是如何统一处理所有错误,而处理程序中采取的操作可以是任何操作。
错误和异常是不同的野兽,每个都有自己的处理程序。因此,要使错误处理统一,您必须首先将错误转换为异常,然后在异常处理程序中执行所需的处理,无论它是什么——日志记录、电子邮件或任何东西。
因此,您将需要本文中介绍的两个功能,即简单地将错误转换为异常的错误处理程序,
set_error_handler(function ($level, $message, $file = '', $line = 0)
{
throw new ErrorException($message, 0, $level, $file, $line);
});
和这样的异常处理程序
set_exception_handler(function ($e)
{
error_log($e);
http_response_code(500);
if (ini_get('display_errors')) {
echo $e;
} else {
error_log($e, 1, "myemailaddress@myserver.com", "From: defaultemail@hostingserver.com");
echo "<h1>500 Internal Server Error</h1>
An internal server error has been occurred.<br>
Please try again later.";
}
});
每次发生错误并且代码在实时站点上运行时,它都会向您发送一封电子邮件。
此外,您可能希望添加一个致命错误处理程序,它可能有助于处理同名错误。可以在文章中看到所有三个处理程序组合在一起的完整示例。
关于mysqli,你是绝对正确的,下面一行
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
将告诉 mysqli 抛出异常,这些异常将由上面定义的处理程序处理。
- 1 回答
- 0 关注
- 140 浏览
添加回答
举报