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