我目前有 set_error_handler()
在遇到任何问题时抛出 ErrorException
。此外,我在 -1
处有 error_reporting()
,因此错误索引数组会引发异常。
无论如何,这是对我的错误/报告环境的粗略概述; PHP mail()
函数在我的 (Win7) 开发机器上抛出错误,在一个项目的过程中,因为我没有安装邮件服务器.我试着在它前面加上 @
来关闭它,但它仍然会触发错误,因此会抛出异常。我可以用 try{}
包装它,但我很好奇为什么它不会关闭。
为什么它不闭嘴?
重申一下,我们几乎可以从等式中删除 mail()
(据我所知);我只是想知道为什么 @
在这种情况下不会用 mail()
或任何函数来完成它的工作。我只是想 mail()
可能出于某种原因是特例。
感谢我们的 friend XDebug
:
( ! ) ErrorException: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\dbc_relaunch_2-0-0\mf\handlers\api\mail\send.php on line 16
好吧,我只是走了:
try{
mail($args);
catch(Exception $exception){
return $failure;
}
return $success;
而不是:
if(@mail($args)){
return $failure;
}
return $success;
一切都很好;我正在浏览@Pheonix 链接的答案,但任何对为什么这可以免费回答有短期订单 react 的人。
最佳答案
你能告诉我们你的错误处理程序吗?请注意,无论您的 error_reporting()
设置如何,即使您在函数前添加了 @
,也会在出现错误时调用您的处理程序。
Of particular note is that this value will be 0 if the statement that caused the error was prepended by the @ error-control operator.
来自 set_error_handler()
的手册页.
如果您不想为由 @
前缀表达式引起的错误抛出异常,则必须检查 error_reporting()
的返回值处理程序。如果它返回零,则您正在处理一个被抑制的错误。
关于PHP 错误报告和 mail(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6536984/