【问题标题】:PHP error reporting and mail()PHP 错误报告和 mail()
【发布时间】:2011-09-26 02:10:26
【问题描述】:

我目前有set_error_handler() 在遇到任何事情时抛出ErrorException。此外,我在-1error_reporting(),因此错误索引数组会引发异常。

无论如何,这是对我的错误/报告环境的粗略概述; PHP mail() 函数在我的 (Win7) 开发机器上抛出错误,在用于项目的过程中,因为我没有安装邮件服务器。我尝试在它前面加上@ 来关闭它,但它仍然会触发错误,因此会引发异常。我可以用try{} 包裹它,但我很好奇它为什么不关闭。

它为什么不闭嘴?

重申一下,我们几乎可以从等式中删除mail()据我所知);我只是想知道为什么@ 在这种情况下不会使用mail() 或任何功能来完成它的工作。我只是想 mail() 可能出于某种原因是特殊情况。


感谢我们的朋友XDebug:

( ! ) ErrorException: mail() [function.mail]: 无法在“localhost”端口 25 连接到邮件服务器,验证 php.ini 中的“SMTP”和“smtp_port”设置或在 C 中使用 ini_set() :\xampp\htdocs\dbc_relaunch_2-0-0\mf\handlers\api\mail\send.php 在第 16 行


好的,我只是走了:

try{
    mail($args);
catch(Exception $exception){
    return $failure;
}
return $success;

而不是:

if(@mail($args)){
    return $failure;
}
return $success;

一切都很好;我正在浏览@Pheonix 链接的答案,但任何对为什么这个问题有简短回复的人都可以免费回答。

【问题讨论】:

  • 什么样的错误?它们是关于什么的?
  • 错误是什么?我怀疑@mail() 不是真正的来源。
  • 抱歉,应该包含一秒。
  • @Pheonix - PHP 的链接已失效,我正在搜索存档,但 cmets 建议“black magic”正在进行中,我宁愿只是 @987654336 @it,但是 @ 的缺乏让我感到困惑。

标签: php error-handling sendmail error-reporting


【解决方案1】:

您能告诉我们您的错误处理程序吗?请注意,无论您的 error_reporting() 设置如何,即使您在函数前加上 @,都会在发生错误时调用您的处理程序。

需要特别注意的是这个值 如果导致的语句为 0 错误是由 @ 前置的 错误控制运算符。

来自set_error_handler()的手册页。

如果您不想为由 @ 前缀表达式引起的错误引发异常,则必须在处理程序中检查 error_reporting() 的返回值。如果它返回零,您正在处理一个抑制错误。

【讨论】:

  • 看准了先生。我的错误处理程序所做的只是抛出一个ErrorException;我需要过滤无声的错误。
【解决方案2】:

这是一篇有趣的文章

How do I catch a PHP Fatal Error

此页面准确地讨论了您想要实现的目标。

【讨论】:

    【解决方案3】:

    这不是一个很好的答案,但我怀疑这是因为错误“消息”和错误“异常”不一样。

    php-exceptions-vs-errors 对此做了一些说明,但我发现,根据this commentset_error_handler() 似乎实际上覆盖了@ 符号。

    也就是说,在处理异常时,try、catch 始终是最好的方法。

    希望能有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      • 2011-04-06
      • 2012-11-21
      相关资源
      最近更新 更多