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

CodeIgniter 錯誤報告等級配置指南:ENVIRONMENT 常數控制

     編輯:PHP 相關知識

核心機制:index.php 中的 ENVIRONMENT 常數

CodeIgniter 透過 index.php 定義 ENVIRONMENT 常數,根據環境自動設定 error_reporting() 等級,無需在控制器中分散控制。

預設配置解析

<?php
// index.php 關鍵片段
define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');

/*
 *---------------------------------------------------------------
 * ERROR REPORTING
 *---------------------------------------------------------------
 */
if (defined('ENVIRONMENT')) {
    switch (ENVIRONMENT) {
        case 'development':
            // 開發環境: 顯示所有錯誤 (含 Notice、Deprecated)
            error_reporting(E_ALL);
            break;
        case 'testing':
        case 'production':
            // 測試/生產環境: 隱藏所有錯誤 (記錄到 log)
            error_reporting(0);
            break;
        default:
            exit('The application environment is not set correctly.');
    }
}
?>

三大環境對照表

環境error_reporting顯示錯誤記錄錯誤適用階段
developmentE_ALL開啟 (螢幕顯示)啟寫入 logs/本地開發、除錯
testing0關閉啟用自動化測試、Staging
production0關閉啟用正式上線

進階自定義錯誤等級

<?php
// index.php - 替換預設 switch 區塊
if (defined('ENVIRONMENT')) {
    switch (ENVIRONMENT) {
        case 'development':
            // 開發: 顯示所有但不顯示 Deprecated (PHP 8.1+ 大量棄用警告)
            error_reporting(E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED);
            ini_set('display_errors', '1');
            ini_set('log_errors', '1');
            ini_set('error_log', APPPATH . 'logs/php_errors.log');
            break;
        case 'testing':
            // 測試: 僅顯示致命錯誤,記錄所有
            error_reporting(E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR);
            ini_set('display_errors', '0');
            ini_set('log_errors', '1');
            break;
        case 'production':
            // 生產: 完全不顯示,只記錄嚴重錯誤
            error_reporting(E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR);
            ini_set('display_errors', '0');
            ini_set('log_errors', '1');
            ini_set('error_log', '/var/log/php/app_errors.log');  // 系統級日誌
            break;
    }
}
?>

環境變數設定方式

方式設定範例優先級
Web 伺服器環境變數Apache: SetEnv CI_ENV production
Nginx + PHP-FPM: fastcgi_param CI_ENV production;
最高 (不改代碼)
.htaccess (Apache)SetEnv CI_ENV development高
PHP 程式碼判斷define('ENVIRONMENT', 'development'); (index.php 直接寫死)中
預設值無環境變數時預設 'development'最低

生產環境安全清單

  1. 確認 ENVIRONMENT = production:var_dump(ENVIRONMENT); 驗證
  2. 關閉 display_errors:ini_get('display_errors') === '0'
  3. 錯誤日誌寫入獨立檔案:避免混雜在 Apache/Nginx error.log
  4. 日誌目錄權限:chmod 755 writable/logs/、擁有者為 PHP-FPM 使用者
  5. 自定義錯誤頁面:application/views/errors/html/error_php.php 避免洩露堆疊追蹤
  6. 異常處理器:set_exception_handler() 統一捕獲未處理例外

常見問題排查

  1. 生產環境仍顯示錯誤:檢查 CI_ENV 環境變數是否正確傳遞給 PHP-FPM (Nginx 需 fastcgi_param)
  2. 日誌不寫入:確認 log_threshold 在 config.php 設為 1 (記錄錯誤)、log_path 可寫入
  3. PHP 8.1+ 大量棄用警告:開發環境加入 & ~E_DEPRECATED 或升級代碼修正棄用用法
  4. 自定義錯誤等級不生效:確認在 index.php 最早期設定,框架載入前

CodeIgniter 4 差異說明

  • CI4 使用 .env 檔案管理環境:CI_ENVIRONMENT = production
  • 錯誤處理透過 Config\Exceptions 類別配置,更靈活
  • 支援 PSR-3 日誌介面,整合 Monolog 等現代日誌庫
  • 預設關閉螢幕錯誤顯示,更安全
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved