如果您沒有使用 imap_errors() 清除錯誤堆疊,任何在腳本執行結束時仍存在的錯誤都將以 PHP 通知的形式提出。
(PHP 4, PHP 5, PHP 7, PHP 8)
imap_errors — 返回所有已發生的 IMAP 錯誤
此函式沒有參數。
此函式返回自上次呼叫 imap_errors() 或頁面開始以來產生的所有 IMAP 錯誤訊息的陣列。如果沒有可用的錯誤訊息,則返回 false
。
如果您沒有使用 imap_errors() 清除錯誤堆疊,任何在腳本執行結束時仍存在的錯誤都將以 PHP 通知的形式提出。
呼叫 imap_close($mbox) 時,會針對 imap 函式中發生的每個錯誤產生通知。要抑制這些錯誤訊息(包括「信箱為空」,這並不是真正的錯誤),只需呼叫 imap_errors(),然後再呼叫 imap_close($mbox)。
對於好奇的人來說,這個函式會返回一個字串的線性陣列,而不是像 error_get_last 那樣返回一個包含不同內容的關聯陣列。
例如:
[0 => '[TRYCREATE] 無資料夾 {imap.gmail.com} (失敗)']
這會在呼叫 imap_open() 之後立即產生字串「信箱為空」。這不是錯誤。這表示像這樣不足以判斷開啟失敗是由於密碼、主機名稱錯誤等原因所致。以下程式碼:
$imap = @imap_open( $mailbox, $user, $pass);
$errors = @imap_errors();
if ( $errors ) {
echo '登入失敗: ' . implode ('; ', $errors );
}
可能會輸出「登入失敗:信箱為空」,這很荒謬。
應該改為檢查 imap_open() 的返回值。
$imap = @imap_open( $mailbox, $user, $pass);
if ( ! $imap ) {
$errors = @imap_errors();
echo '登入失敗: ' . implode ('; ', $errors );
}