我可以使用错误控制操作符(@)检测是否调用了函数吗?

时间:2014-06-30 19:25:30

标签: php error-handling

我有自定义错误处理程序,它应该在抛出未捕获的异常或生成某些错误/警告/通知时停止执行应用程序,显示一条很好的错误消息,然后通过电子邮件向开发人员发送电子邮件。

除了我找不到忽略由@ftp_login)调用的函数生成的警告之外,一切都运行良好

debug_backtrace()显示函数名称,但不显示@。有没有办法检测它,或者我是否必须将函数名称硬编码到错误处理程序中?

2 个答案:

答案 0 :(得分:4)

来自PHP手册:http://us3.php.net/manual/en/language.operators.errorcontrol.php

  

PHP支持一个错误控制操作符:at符号(@)。什么时候   预先附加到PHP中的表达式,可能是任何错误消息   该表达式生成的内容将被忽略。

     

如果您已设置自定义错误处理函数   set_error_handler()然后它仍然会被调用,但这个自定义   错误处理程序可以(并且应该)调用error_reporting()   当触发错误的调用前面有@。

时返回0

只需在错误处理程序中使用“error_reporting()=== 0”即可知道函数前面的位置是@

答案 1 :(得分:3)

如果您想将其包含在电子邮件中,我能想到的唯一方法就是从文件中捕获该行。假设您的错误处理函数具有签名:

bool handler(int $errno, string $errstr [,string $errfile [,int $errline [,array $errcontext]]])

尝试:

$code = file($errfile)[$errline];

然后,您可以在strpos中加入此文字或@,然后从那里决定。