2011-03-24 21 views
5
沉默imap_open錯誤通知

我使用PHP 5.3.5,我使用不能在PHP

$this->[email protected]_open($this->server,$this->username,$this->password); 

@符號應該沉默的錯誤報告,但它不,我相信,在這個發生錯誤線。我希望我的應用程序能夠識別問題本身並作出反應,並且不會發生NOTICE錯誤,並且由於我的公司開發策略,我無法關閉整個PHP的錯誤報告。

沒有@我得到:

imap_open()[function.imap開]:無法打開流{pop3.seznam.cz:110/pop3}INBOX 有了它,我得到:注意未知:驗證失敗(驗證失敗)(errflg = 1)

如果登錄信息正常,它會打開連接並且不會發生錯誤。

當imap_open不能管理連接時,我總是得到NOTICE錯誤,它與我的JSON結果混淆了。如何讓它沉默?

+0

不PHP報告行生成的通知嗎? @ 應該管用。 – Belinda 2011-03-24 16:35:23

+1

發佈您準確看到的通知也很有幫助。因爲@操作符應該真的有效。 – 2011-03-24 16:37:23

+0

例如:通知未知:身份驗證失敗(身份驗證失敗)(errflg = 1) – Ragnar 2011-03-24 17:23:17

回答

17

我加

$this->[email protected]_open($this->server,$this->username,$this->password); 
imap_errors(); 
imap_alerts(); 

imap_errors();imap_alerts();做魔術:)

+0

爲我完美工作。順便說一下,您還可以將imap_errors()和imap_alerts()的輸出分配給數組,並將其作爲診斷文本打印出來。 – xgretsch 2014-11-24 09:47:46

+0

哇奇妙的解決方案。爲我工作。謝謝@Ragnar。 – Raj 2017-08-01 09:02:46

0

兩種可能性浮現在腦海中:

  1. 因此,該通知被抑制您可以設置在php.ini,或函數ini_set的.htaccess或類似使用error_reporting,但因爲你wan't您的應用程序處理錯誤,這可能不是,你需要什麼

  2. 實現你自己的錯誤處理。這不是很難做到。你定義了一個函數來處理錯誤,然後告訴PHP使用它來代替它自己的默認處理程序。

    //定義

    功能將myHandler($錯誤號,$ errstr){}

    //對你的處理腳本開頭的某處

    的set_error_han dler( 「將myHandler」);

查看set_error_handler瞭解更多信息。另外請注意,從註冊處理程序的那一刻起,您需要全權負責。你可以抑制或拋出任何你需要/想要的錯誤。

+0

第一個不是我想要的,第二個與第一個具有相同的效果。我不能使用任何處理所有php錯誤的東西 – Ragnar 2011-03-24 17:23:01

+1

設置error_reporting級別對此沒有影響。我只花了一個多小時的時間,並且抑制'imap_ *'函數產生的通知和警告的唯一方法是@ Ragnar的回答。 PHP開發者已經用IMAP編寫了一些真正的令人髮指的事情,使其成爲我必須處理的最糟糕的庫。 – Sammitch 2013-11-28 19:03:45