加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

检测(在自定义错误处理程序中)如果PHP错误实际上被@

发布时间:2020-12-13 16:42:17 所属栏目:PHP教程 来源:网络整理
导读:语境: 我有一个应用程序的三个环境:dev(本地),测试/分段(prod服务器),生产.应用程序知道哪个是哪个.报告和生产的错误报告为0,所以不会显示错误.在开发我想要立即看到错误,我想看到他们发生的地方,所以不在一些日志,但代码的结果. 但是,我不想看到我明确地
语境:

我有一个应用程序的三个环境:dev(本地),测试/分段(prod服务器),生产.应用程序知道哪个是哪个.报告和生产的错误报告为0,所以不会显示错误.在开发我想要立即看到错误,我想看到他们发生的地方,所以不在一些日志,但代码的结果.

但是,我不想看到我明确地用@禁止的错误.我一直在使用fsockopen,当它无法连接时会发出警告.我接受无连接,但不想看到错误.甚至没有开发商.

即使在代码中被抑制,所有的错误仍然通过自定义错误处理程序.

我的错误处理程序只有4个参数:errno,error,file,line.从那些我不能看到错误是否最初被抑制.如果我可以看到那里,我可以选择是否打印错误(现在我一直在做,如果env = dev).

有任何想法吗?或者也许在如何完全忽略被抑制的错误(以至于他们甚至没有达到自定义的错误处理程序)?

set_error_handler手册页中有一个提示.

[the error_reporting()] value will be 0 if the statement that caused the error was
prepended by the @ error-control operator

当您使用错误控制运算符@时,发生的是这样的:

>错误报告设置为0(无错误) – error_reporting(0)
>表达式被评估
>错误报告设置回到上一个值(即重新打开)

上面略有混淆的引用是指error_reporting返回当前设置的事实.如果您使用控制操作符抑制了错误,则调用error_reporting()将返回0.

因此,如果你知道你把它设置为非零(即报告一些错误),并返回零,你知道错误被抑制了.

如果您检测到抑制错误并想知道它是什么,您可以在变量$php_errormsg中找到它(如果在php.ini中track_errors设置为true).

请注意,错误控制运算符会导致很多开销,因为它每次使用时会更改错误报告级别两次.它会减慢你的脚本.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读