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

PHP 自定義錯誤處理完整指南與實戰範例

     編輯:PHP 綜合知識

什麼是 PHP 自定義錯誤處理?

在 PHP 開發中,預設的錯誤輸出往往不夠友善,且難以整合到專案的日誌系統中。自定義錯誤處理讓開發者能完全掌控錯誤的捕獲、格式化、記錄與呈現方式,是建構健壯應用程式的關鍵技能。

核心機制:set_error_handler()

透過 set_error_handler() 函式,我們可以指定一個自訂函式來接管所有非致命錯誤的處理邏輯:

set_error_handler('myErrorHandler');

自訂錯誤處理函式簽名

處理函式會自動接收四個參數,包含錯誤的完整上下文資訊:

  • $errNo:錯誤代碼(如 E_WARNING、E_NOTICE 等)
  • $errMsg:錯誤訊息字串
  • $errFile:發生錯誤的檔案路徑
  • $errLine:發生錯誤的行號

實作範例

function myErrorHandler($errNo, $errMsg, $errFile, $errLine) {
    // 格式化輸出錯誤資訊
    echo "錯誤代碼: {$errNo}<br>";
    echo "錯誤訊息: {$errMsg}<br>";
    echo "發生檔案: {$errFile}<br>";
    echo "發生行號: {$errLine}<br>";
    
    // 實務上通常會寫入日誌檔或發送通知
    // error_log("[{$errNo}] {$errMsg} in {$errFile}:{$errLine}");
}

// 觸發一個使用者定義的通知錯誤
trigger_error('這是一個測試錯誤', E_USER_NOTICE);

⚠️ 重要限制與注意事項

  1. 系統停止介入:一旦設定自定義處理器,PHP 內建的錯誤處理機制將不再執行。
  2. 無法捕獲致命錯誤:E_ERROR、E_PARSE、E_CORE_ERROR、E_USER_ERROR 等嚴重錯誤會導致腳本立即終止,自定義處理器無法攔截。
  3. 錯誤層級過濾:處理器仍受 error_reporting() 設定影響,被過濾的錯誤不會觸發處理器。

進階應用建議

在實際專案中,建議結合 Monolog 等日誌庫,依據錯誤嚴重程度分流處理:開發環境顯示詳細資訊,正式環境記錄日誌並顯示友善錯誤頁面。同時可搭配 register_shutdown_function() 捕獲致命錯誤,實現完整的錯誤監控體系。

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