我有自定义错误处理程序,它应该在抛出未捕获的异常或生成某些错误/警告/通知时停止执行应用程序,显示一条很好的错误消息,然后通过电子邮件向开发人员发送电子邮件。
除了我找不到忽略由@
(ftp_login
)调用的函数生成的警告之外,一切都运行良好
debug_backtrace()
显示函数名称,但不显示@
。有没有办法检测它,或者我是否必须将函数名称硬编码到错误处理程序中?
答案 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
中加入此文字或@
,然后从那里决定。