当无法访问 Web 上的某些内容(api、数据库)时,我将如何停止执行脚本的其余部分并将错误记录在日志文件中?好吧,这样访问者就不会看到确切的原因,而是会看到我的自定义消息(比如,“刚刚发生了一件坏事”)。我需要采取什么步骤来安排事情?
最佳答案
我通常喜欢使用 Exceptions ,在那种情况下:它允许我将所有错误处理代码放在一个地方。
例如,我会使用类似这样的东西:
try {
// Some code
// Some code that throws an exception
// Some other code -- will not be executed when there's been an Exception
} catch (Exception $e) {
// Log the technical error to file / database
// Display a nice error message
}
有了它,所有错误处理代码都在 catch
block 中——而不是分散在我的整个应用程序中。
但请注意,许多 PHP 函数不会抛出异常,只会引发警告或错误...
对于那些,你可以使用 set_error_handler
定义您自己的错误处理程序——它可能会抛出异常 ;-)
例如,参见manual page of ErrorException
上的例子.
尽管这对于许多错误/警告都可以正常工作,但您应该注意它不适用于Parse Error
或Fatal Error
:
- 第一种是在实际执行 PHP 代码之前实际引发
- 而第二种是……好吧……致命。
而且我绝不会在我的代码中间放置任何 die
或 exit
:在我看来,这是处理错误的最糟糕的可能方式之一。
我也会这样配置我的服务器/应用程序:
- 错误消息不显示在输出中,设置
display_errors
关闭
。 - 使用
log_errors
将错误记录到文件中和error_log
.
关于PHP:如何优雅地管理错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2362924/