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

前端之家收集整理的这篇文章主要介绍了检测(在自定义错误处理程序中)如果PHP错误实际上被@前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
语境:

我有一个应用程序的三个环境: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).

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

猜你在找的PHP相关文章