CodeIgniter 預設會在瀏覽器顯示詳細的 PHP 與資料庫錯誤訊息,包含 SQL 語法、資料表結構等敏感資訊。上線環境必須關閉錯誤顯示,但單純修改 php.ini 的 display_errors 無法攔截 CI 核心拋出的例外。
修改專案根目錄 index.php,將 ENVIRONMENT 設為 production:
define('ENVIRONMENT', 'production'); // 預設為 development
if (defined('ENVIRONMENT')) {
switch (ENVIRONMENT) {
case 'development':
error_reporting(E_ALL);
break;
case 'testing':
case 'production':
error_reporting(0);
break;
default:
exit('The application environment is not set correctly.');
}
}
此設定會自動關閉所有 PHP 錯誤回報,且 CI 內部的 show_error() 也不會輸出詳細堆疊追蹤。
針對「A Database Error Occurred」訊息,需修改 application/config/database.php:
$db['default']['db_debug'] = FALSE;
設為 FALSE 後,資料庫錯誤將不再顯示 SQL 語句與錯誤代碼,僅記錄於日誌(若啟用日誌)。
config.php 中 $config['log_threshold'] 設定適當等級(如 1 錯誤),並確保 application/logs/ 目錄可寫入。application/views/errors/html/error_general.php 等視圖,提供友善的使用者提示。$_SERVER['CI_ENV'])動態切換 ENVIRONMENT,避免程式碼併入錯誤設定。application/logs/log-YYYY-MM-DD.php 是否記錄詳細錯誤資訊。