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

PHP error_reporting() 函式完整指南:錯誤等級、配置最佳實踐與常見誤區

     編輯:PHP 相關知識

error_reporting() 是什麼?

error_reporting() 用於**設定或獲取當前腳本的錯誤報告等級**。它決定了哪些錯誤會被顯示、記錄或忽略。合理配置能讓開發期盡早發現問題,生產期避免敏感資訊洩露。

PHP 14 大錯誤等級常數對照表

常數數值說明
E_ERROR1致命執行錯誤,腳本終止
E_WARNING2非致命執行警告,腳本繼續
E_PARSE4編譯期解析錯誤
E_NOTICE8執行期通知(如未定義變數)
E_CORE_ERROR16PHP 啟動時的致命錯誤
E_CORE_WARNING32PHP 啟動時的警告
E_COMPILE_ERROR64編譯時致命錯誤
E_COMPILE_WARNING128編譯時警告
E_USER_ERROR256使用者觸發的致命錯誤
E_USER_WARNING512使用者觸發的警告
E_USER_NOTICE1024使用者觸發的通知
E_STRICT2048程式碼標準建議(PHP 5.4+ 已併入 E_ALL)
E_RECOVERABLE_ERROR4096可被捕獲的致命錯誤
E_ALL32767所有錯誤與警告(PHP 5.4+ 包含 E_STRICT)

php.ini 生產/開發環境建議配置

; 開發環境:顯示所有錯誤,便於除錯
display_errors = On
error_reporting = E_ALL

; 生產環境:隱藏錯誤細節,記錄至日誌
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT

關鍵點:生產環境**絕不可**開啟 display_errors,防止資料庫連線資訊、路徑結構等敏感資料外洩。

程式碼中動態控制範例

<?php
// 完全關閉錯誤報告(極不推薦,除非極特殊場景)
error_reporting(0);

// 僅報告嚴重錯誤
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// 報告所有錯誤(開發環境推薦)
error_reporting(E_ALL);

// 等同 E_ALL,但排除 NOTICE 與 DEPRECATED
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);

// 獲取當前等級
$currentLevel = error_reporting();

常見誤區與避坑指南

  1. 誤以為 error_reporting(0) 能「修復」Bug:只是掩蓋症狀,真正的修復是修正代碼邏輯。
  2. 忽略 log_errors 配置:生產環境若不記錄日誌,線上問題將無從追蹤。
  3. 混淆 E_STRICT 與 E_DEPRECATED:前者建議更好寫法,後者警告即將移除功能,PHP 7+ 已大量清理。
  4. 未設定 error_log 路徑:導致錯誤寫入 Web 伺服器預設日誌(如 Apache error.log),難以篩選。

進階技巧:自訂錯誤處理器

set_error_handler(function ($severity, $message, $file, $line) {
    if (!(error_reporting() & $severity)) return false; // 尊重 error_reporting 設定
    throw new ErrorException($message, 0, $severity, $file, $line);
});

set_exception_handler(function ($e) {
    // 統一記錄、通知、回應友善錯誤頁面
    error_log($e->getMessage());
    http_response_code(500);
    echo '系統繁忙,請稍後再試。';
});

掌握錯誤報告機制,是寫出健壯 PHP 應用的基石。建議在專案啟動檔(如 bootstrap.php)統一設定,避免分散在各處造成不一致。

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