首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 自訂錯誤處理器:透過 Email 發送錯誤詳情

     編輯:PHP 相關知識

前言

專案上線後,即時掌握錯誤資訊至關重要。PHP 內建的 set_error_handler() 允許開發者攔截錯誤並自訂處理邏輯。本文示範如何建立一個錯誤處理函數,將錯誤編號、訊息、檔案、行號及當時變數內容整理成 HTML 郵件寄送給開發人員。

完整程式碼

function nettuts_error_handler($number, $message, $file, $line, $vars) {
    $email = "<p>An error ($number) occurred on line $line and in the file: $file.</p>";
    $email .= "<p>$message</p>";
    $email .= "<pre>" . print_r($vars, true) . "</pre>";

    $headers = 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    error_log($email, 1, 'you@youremail.com', $headers);

    // 非 E_NOTICE 且非嚴重錯誤時終止腳本
    if (($number !== E_NOTICE) && ($number < 2048)) {
        die("有錯誤,請稍後再試!");
    }
}

set_error_handler('nettuts_error_handler');

// 測試:觸發未定義變數錯誤
echo $somevarthatdoesnotexist;

關鍵點解析

  • 錯誤資訊蒐集:參數 $vars 包含當時作用域內所有變數,利用 print_r($vars, true) 轉為字串。
  • HTML 郵件格式:設定 Content-type: text/html 使郵件支援排版。
  • 錯誤等級過濾:範例中忽略 E_NOTICE,且僅對錯誤代碼小於 2048(即 E_ERROR, E_WARNING, E_PARSE 等)才終止執行,避免因小錯誤導致服務中斷。
  • 註冊處理器:set_error_handler('nettuts_error_handler') 將自訂函數掛入 PHP 錯誤處理流程。

進階建議

  1. 郵件發送可靠性:error_log() 依賴本地 MTA,生產環境建議改用 PHPMailer 或 SwiftMailer 透過 SMTP 發送,確保送達。
  2. 錯誤去重:可引入快取機制(如 Redis),同一錯誤在短時間內僅發送一次通知,避免郵件風暴。
  3. 敏感資料過濾:發送前應過濾 $vars 中的密碼、Token 等敏感欄位。
  4. 整合日誌系統:除郵件外,同步寫入檔案或傳送至 Logstash、Sentry 等集中式日誌平台。

總結

透過簡單的自訂錯誤處理器,即可將 PHP 執行期錯誤即時推送至信箱,大幅縮短問題發現與修復的時間。結合上述進階策略,可構建更健壯的錯誤監控體系。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved