PHP:如何优雅地管理错误?

标签 php error-handling

当无法访问 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 ErrorFatal Error :

  • 第一种是在实际执行 PHP 代码之前实际引发
  • 而第二种是……好吧……致命。


而且我绝不会在我的代码中间放置任何 dieexit:在我看来,这是处理错误的最糟糕的可能方式之一。

我也会这样配置我的服务器/应用程序:

关于PHP:如何优雅地管理错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2362924/

相关文章:

php - 如何将用户对象绑定(bind)到中间件中的请求

php - Google recaptcha 不能在我的网站上工作,但在其他网站上工作

php - 在 foreach 语句中插入增量值而不使用 auto_increment

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

android - 如何从 Firebase Task<AuthResult> 登录失败中检索错误代码?

php - 获取 “mysqli::real_connect(): (HY000/2002): Connection refused”

php - 如果 php ://input receives simultaneous webhooks? 会发生什么

php - 类要求进入方法

php - 如何从Chrome浏览器找到空白屏幕的PHP错误?

flutter - FLUTTER : Unhandled Exception: setState() or markNeedsBuild() called during build