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

PHP 專業級錯誤與異常處理類:美觀輸出、堆疊追蹤、日誌記錄全內建

     編輯:PHP 相關知識

生產環境需要一個既能在開發期提供豐富除錯資訊,又能在正式環境安全記錄日誌、友善提示用戶的錯誤處理機制。本文提供一個開箱即用的 Error 類,支援系統錯誤、資料庫異常、自定義異常的統一處理,輸出美觀的 HTML 錯誤頁面,並內建重複日誌去重、SQL 脫敏、堆疊追蹤美化等企業級特性。

核心功能亮點

  • 統一入口:set_error_handler() + set_exception_handler() 接管所有錯誤/異常
  • 分類處理:系統錯誤、資料庫異常(DbException)分離顯示,SQL 自動脫敏資料庫名/前綴
  • 堆疊追蹤美化:支援反射 API 解析內部函數檔案/行號,自動過濾框架內部調用
  • 日誌去重:同一錯誤 10 分鐘內僅記錄一次,避免日誌爆炸
  • 響應式錯誤頁:內建 CSS 樣式,直接輸出完整 HTML,無需模板引擎

快速接入範例

<?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 脫敏:非除錯模式下隱藏資料庫名、表前綴

輸出效果預覽

錯誤頁面截圖

生產環境部署建議

  1. 定義常數 SITE_PATH(專案根目錄)、LOG_PATH(日誌目錄)、SITE_DEBUG(是否除錯模式)
  2. 確保 LOG_PATH 可寫入,日誌檔命名格式:Y.m.d_errorlog.php
  3. 正式環境關閉 SITE_DEBUG,自動啟用 SQL 脫敏與錯誤頁友善提示
  4. 若使用框架(Laravel/ThinkPHP/Yii),可改寫為框架的異常處理器擴展

這個類已在多個高併發專案中穩定運行,能大幅減少「線上報錯無日誌、日誌刷屏、SQL 洩露」等常見痛點,是 PHP 專案從「能跑」邁向「可維運」的關鍵基建之一。

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