生產環境需要一個既能在開發期提供豐富除錯資訊,又能在正式環境安全記錄日誌、友善提示用戶的錯誤處理機制。本文提供一個開箱即用的 Error 類,支援系統錯誤、資料庫異常、自定義異常的統一處理,輸出美觀的 HTML 錯誤頁面,並內建重複日誌去重、SQL 脫敏、堆疊追蹤美化等企業級特性。
set_error_handler() + set_exception_handler() 接管所有錯誤/異常DbException)分離顯示,SQL 自動脫敏資料庫名/前綴<?php
require_once 'Error.class.php';
// 註冊全域處理器
set_error_handler('handle_error');
set_exception_handler('handle_exception');
function handle_error($errNo, $errStr, $errFile, $errLine) {
if ($errNo) Error::systemError($errStr);
}
function handle_exception($exception) {
Error::exceptionError($exception);
}
// 手動拋出資料庫異常示例
try {
// PDO 操作...
} catch (PDOException $e) {
throw new DbException($e->getMessage(), $e->getCode(), $sql, $dbConfig);
}
| 方法 | 用途 |
|---|---|
Error::systemError($msg, $show, $save, $halt) | 統一處理系統錯誤,可控制是否顯示、記錄、終止 |
Error::exceptionError($exception) | 處理所有未捕獲異常,自動識別 DbException |
Error::debugBacktrace() | 回傳格式化後的堆疊追蹤(顯示版 / 日誌版) |
Error::writeErrorLog($msg) | 寫入日誌檔,內建 MD5 去重與 IP/UA 記錄 |
Error::sqlClear($sql, $dbConfig) | SQL 脫敏:非除錯模式下隱藏資料庫名、表前綴 |

SITE_PATH(專案根目錄)、LOG_PATH(日誌目錄)、SITE_DEBUG(是否除錯模式)LOG_PATH 可寫入,日誌檔命名格式:Y.m.d_errorlog.phpSITE_DEBUG,自動啟用 SQL 脫敏與錯誤頁友善提示這個類已在多個高併發專案中穩定運行,能大幅減少「線上報錯無日誌、日誌刷屏、SQL 洩露」等常見痛點,是 PHP 專案從「能跑」邁向「可維運」的關鍵基建之一。