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

PHP 錯誤捕獲與友善提示:error_get_last() 實戰取代 try-catch

     編輯:PHP 相關知識

為什麼 try-catch 不適用?

PHP 的 try { } catch { } 僅能捕獲手動拋出的 Exception,無法捕獲內建函式觸發的錯誤(如 5/0、file_get_contents 失敗)。

核心方案:error_get_last() 事後檢測

<?php
error_reporting(0); // 隱藏系統預設錯誤輸出,置於腳本最前端

// 正常業務代碼
echo 5 / 0; // 故意觸發除零錯誤
// $content = file_get_contents("not_exist.html");

// 統一錯誤處理
$err = error_get_last(); // 回傳陣列或 null
if ($err !== null) {
    echo "系統發生錯誤,請稍後再試。";
    // 記錄詳細資訊供除錯
    error_log("錯誤類型: {$err['type']}\n訊息: {$err['message']}\n檔案: {$err['file']}:{$err['line']}");
    exit;
}

錯誤陣列結構

Array
(
    [type] => 2              // E_WARNING
    [message] => Division by zero
    [file] => /var/www/test.php
    [line] => 13
)

進階:自訂錯誤處理器 set_error_handler()

set_error_handler(function($severity, $message, $file, $line) {
    if (!(error_reporting() & $severity)) return false; // 遵循 error_reporting 設定
    throw new ErrorException($message, 0, $severity, $file, $line);
});
try {
    echo 5 / 0;
} catch (ErrorException $e) {
    echo "捕獲錯誤: " . $e->getMessage();
}

適用場景建議

  • 簡單腳本、API 介面:error_get_last() 輕量高效
  • 大型專案、框架開發:set_error_handler() + Exception 統一異常處理
  • 生產環境務必關閉 display_errors,啟用 log_errors
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved