某虛擬主機預設 error_reporting 極為敏感,連未定義變數(E_NOTICE)都輸出警告,導致頁面滿屏錯誤訊息。無法修改 php.ini,需在程式碼中動態控制。
int error_reporting(int $level = null);
參數為位元遮罩,常用常數:
| 常數 | 值 | 說明 |
|---|---|---|
| E_ERROR | 1 | 致命執行錯誤,腳本終止 |
| E_WARNING | 2 | 執行警告,不終止腳本 |
| E_PARSE | 4 | 編譯時解析錯誤 |
| E_NOTICE | 8 | 運行時提示(如未定義變數),非必然錯誤 |
| E_CORE_ERROR | 16 | PHP 核心啟動致命錯誤 |
| E_CORE_WARNING | 32 | PHP 核心啟動警告 |
<?php
// 僅顯示嚴重錯誤與解析錯誤,隱藏 NOTICE、WARNING 等
error_reporting(E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING);
// 等價數值寫法
error_reporting(1 | 4 | 16 | 32); // = 53
?>
置於腳本最開頭(或通用引入檔),即可屏蔽 Undefined variable 等干擾訊息,保留關鍵錯誤可見性。
E_ALL(或 E_ALL & ~E_DEPRECATED & ~E_STRICT)E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNINGini_set('display_errors', '0'); error_reporting(E_ALL); 配合 error_log。error_reporting(0) 會關閉所有錯誤報告,**除錯極度困難,生產環境也不建議完全關閉**。E_STRICT、E_DEPRECATED 等常數,組合時請查閱對應版本文件。