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();
}
error_get_last() 輕量高效set_error_handler() + Exception 統一異常處理display_errors,啟用 log_errors