【问题标题】:Can't silence imap_open error notices in PHP无法在 PHP 中使 imap_open 错误通知静音
【发布时间】:2011-03-24 16:29:28
【问题描述】:

我正在使用 PHP 5.3.5,我正在使用

$this->marubox=@imap_open($this->server,$this->username,$this->password);

@ 符号应该使错误报告静音,但它不会,我确信错误发生在这一行。我希望我的应用程序能够识别问题本身并做出反应,并且不会出现 NOTICE 错误,并且由于我的公司开发政策,我无法关闭整个 PHP 的错误报告。

没有@我得到:

imap_open() [function.imap-open]: 无法打开流 {pop3.seznam.cz:110/pop3}INBOX 有了它我得到:Notice Unknown: Authentication failed (Authentication failed) (errflg=1)

如果登录信息正常,则打开连接并且没有错误发生。

当 imap_open 无法连接并且它弄乱了我的 JSON 结果时,我总是收到 NOTICE 错误。请问如何静音?

【问题讨论】:

  • PHP 是否将该行报告为生成通知的行? @ 应该可以工作。
  • 发布您看到的确切通知也会很有帮助。因为@ 运算符应该真的可以工作。
  • 例如:Notice Unknown: Authentication failed (Authentication failed) (errflg=1)
  • 它没有给我行号,但这是因为我通过测试证明了 imap 打开
  • 如果我不使用@符号,我会得到这个:imap_open() [function.imap-open]:无法打开流 {pop3.seznam.cz:110/pop3}INBOX

标签: php imap-open


【解决方案1】:

我加了

$this->marubox=@imap_open($this->server,$this->username,$this->password);
imap_errors();
imap_alerts();

还有imap_errors();imap_alerts(); 施展魔法:)

【讨论】:

  • 非常适合我。顺便说一句,您还可以将 imap_errors() 和 imap_alerts() 的输出分配给数组并将它们作为诊断文本打印出来。
【解决方案2】:

想到两种可能性:

    1234563
  1. 实现您自己的错误处理。这并不难做到。您为错误处理定义一个函数,然后告诉 PHP 使用它而不是它自己的默认处理程序。

    //定义

    函数 myHandler($errno, $errstr) {}

    //处理脚本开始的地方

    set_error_handler("myHandler");

请参阅set_error_handler 了解更多信息。另请注意,从您注册处理程序的那一刻起,您全权负责。您可以抑制或抛出您需要/想要的任何错误。

【讨论】:

  • 第一个不是我想要的,第二个的效果和第一个差不多。我不能使用任何处理所有 php 错误的东西
  • 设置error_reporting级别对此没有影响。我刚刚花了一个小时的大部分时间来解决这个问题,而抑制imap_* 函数生成的通知和警告的唯一方法是在@Ragnar 的回答中。 PHP 开发人员用 IMAP 做了一些真正令人发指和令人发指的事情,使其成为我曾经处理过的最糟糕的库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多