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

2023-12-12

当无法访问网络上的某些内容(api、数据库)时,我如何停止执行脚本的其余部分并将错误记录在日志文件中?好吧,这样访问者就不会看到确切的原因,而是会看到我的自定义消息(例如,“刚刚发生了一件坏事”)。我需要采取哪些步骤来安排事情?


我一般喜欢使用例外情况,在这种情况下:它允许我将所有错误处理代码放在一个地方。


For instance, I'd use something a bit like this :
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块——并且没有分散在我的整个应用程序中。


Note, though, that many PHP functions don't throw exceptions, and only raise a warning or an error...

对于那些,你可以使用set_error_handler定义您自己的错误处理程序——这可能会抛出异常;-)
例如,请参阅上的示例的手册页ErrorException.

尽管这对于许多错误/警告来说效果很好,但您应该注意,它不适用于Parse Error nor Fatal Error :

  • 第一种实际上是在 PHP 代码实际执行之前引发的
  • 第二种是……嗯……致命的。

And I would never place any `die` nor `exit` in the middle of my code : that's, in my opinion, one of the worst possible way of dealing with errors.

我还会配置我的服务器/应用程序:

  • 错误消息不显示在输出、设置中display_errors to Off.
  • 错误被记录到文件中,使用log_errors and error_log.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP:如何优雅地管理错误? 的相关文章

  • 国家/城市/州验证

    我想使用 PHP 和 jQuery 做以下事情 https www careerbuilder com share register aspx sc cmp1 JS LoginASPX RegNow https www careerbuil
  • 添加发票时 QuickBooks IPP v3 出现错误 3200

    我已经在生产中使用 QuickBooks PHP DevKit 一段时间了 没有出现任何问题 然而 最近我从我的程序中收到以下错误create invoiceajax脚本当我吐出来的时候 if resp InvoiceService gt
  • 提交表单后关闭featherlight

    我有一个 demo employee php 页面 它检索系统的所有用户以及可以执行的特定操作 td table tr td a href i class fa fa pencil square o i a td td a href i c
  • PHP PDO 和 MySQLi [重复]

    这个问题在这里已经有答案了 我刚刚完成了 PHP 入门课程 整个 stackoverflow 论坛上的人们都建议我切换到 PDO 准备好的语句或 MYSQLi 我简单地检查了手册 但其中大部分内容都超出了我的理解范围 到目前为止我一直在使用
  • Javascript 函数接受 PHP 变量

    我完全空白 为什么这不起作用 我可以通过一个变量来完成此操作 但不能通过两个变量 当我实际使用像这样的数字时getnt 1 2 有用 它只是不适用于两个 PHP 变量 我可以使代码与echo a href nt php nid n a
  • PHP MySQL 仅当 IP 是新时才更新列

    我试图让我的脚本在每次 IP 出现新值时将观看次数更新 1 604800秒后 如果同一用户 同一IP 在604800秒后再次回来 则查看计数 1 有人可以帮我吗 Get video id id GET id Get video title
  • 该模型已具有同名的元素 - ASP.NET

    我正在使用 ASP Net Web 应用程序 每当我尝试添加FOREIGN KEY此错误出现在数据工具操作中 SQL71508 该模型已具有同名的元素 dbo FK Sellers Users SQL71508 该模型已经有一个元素 具有相
  • 使用 preg_replace 缩小 CSS

    我正在尝试使用 preg replace 缩小多个 CSS 文件 实际上 我只是想从文件中删除任何换行符 制表符和注释 以下对我有用 regex array t r n echo preg replace regex file get co
  • SELECT、SELECT COUNT 和交叉引用表是否可以仅通过一个查询来处理?

    我有一个显示项目列表的页面 每个项目都会显示从 mysqli 数据库检索到的以下数据 Title Subtitle 描述 零件编号 x 中的 1 与该项目相关的照片总数 从项目中随机选择的照片 标签列表 使用分页系统每页显示 6 个项目 由
  • 我应该在客户端和服务器上都使用 MVC 吗?

    我决定在我的网站上使用 MVC 模式 所以 现在我在我的网站上使用 Backbone js 框架 我网站上的所有操作都是ajaxy 所以server只从db获取数据 并将数据保存到db 我是否也需要在服务器端使用 MVC 这让一切都变得复杂
  • 使用字符串路径设置嵌套数组数据[重复]

    这个问题在这里已经有答案了 我正在尝试编写一个不寻常的用例 目标是这样的 我希望客户能够提供一个字符串 例如 cars honda civic On 使用这个字符串 我的代码将设置一个值 如下所示 data cars honda civic
  • 我在 php 中执行的这个 include 语句有什么问题吗? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我希望这篇文章发布在我的网站上 但它给出了错误 解析错误 语法错误 第 1 行 opt lampp htdocs whi
  • 无法使用服务帐户访问我的 Google 云端硬盘文件

    我想创建一个应用程序 可以将文件添加到谷歌驱动器并将该文件共享给其他用户 电子邮件受保护 cdn cgi l email protection 该用户 电子邮件受保护 cdn cgi l email protection应该登录到应用程序
  • 用 PHP 发送电子邮件 - 空白电子邮件接收

    我正在尝试使用 PHP 发送电子邮件 我的问题实际上是 发送的电子邮件是空白的 我的 PHP 函数 function sendMail template Email Subject USR Id USR Email postdata htt
  • PHP DateTime 四舍五入到最近的 10 分钟

    我正在从 mysql 字段检索日期时间 但我需要对其进行四舍五入up精确到 10 分钟 例如 如果日期时间是 2013 11 06 14 00 01 我想返回时间为 6 11 2013 14 10 做到这一点最简单的方法是什么 dateti
  • 使用准备好的语句的 SQL ORDER BY

    我已经尝试了该代码的所有不同类型的变体 但无法使其工作 任何人都可以指出我正确的方向吗 if isset GET s And isset GET o if strip tags htmlspecialchars GET s s sortin
  • PHP 从 MSSQL 存储过程获取返回值

    我无法从 SQL Server MSSQL 2012 SP 获取 OUTPUT 参数以返回 PHP 我的存储过程是 CREATE PROCEDURE spGetNextSeqID ID AS INT OUTPUT AS BEGIN BEGI
  • 会话变量从 while 循环发送特定变量

    我有这个简单的while 循环它从 mysql 查询中检索数据并在我的主页上显示几个链接 我想避免使用 php get 函数并将查询字符串添加到我的网址中 我正在考虑使用会话变量 但我需要帮助 而且我很确定这是无法完成的 当访问者单击 wh
  • PHP 如何使用比较运算符比较字符串?

    我正在使用比较运算符来比较字符串 我需要对以下两个比较及其结果进行某种解释 if ai gt i echo Yes else echo No output No 为什么这些会这样输出 if ia gt i echo Yes else ech
  • wordpressfunctions.php - 为每个帖子类别使用不同的页面模板

    我想连接到 save post 函数 找出帖子所属的类别 然后为每个类别中的帖子分配不同的页面模板 我已经尝试了大约 30 个不同的版本 但都没有成功 有人可以帮我指出正确的方向吗 add action save post assign c

随机推荐