PHP 預設會顯示 Notice 級別警告(如「Undefined variable」、「Undefined index」),這在開發階段有助於發現潛在問題,但部署到生產環境時會導致頁面輸出錯誤訊息,影響使用者體驗甚至洩露系統資訊。
PHP Notice: Undefined variable PHP Notice: Undefined index
PHP 不像 C++ 那麼嚴格,開發時常利用「未定義變數當作空值」的特性快速編碼,但這在嚴格模式下會噴出大量 Notice。
<?php // error_reporting(E_ALL); // 顯示所有錯誤(開發環境建議) error_reporting(E_ALL & ~E_NOTICE); // 顯示除 Notice 外的所有錯誤(生產環境推薦) ?>
關鍵差異:
E_ALL:包含所有錯誤級別E_ALL & ~E_NOTICE:按位排除 Notice,保留 Warning、Error 等關鍵錯誤<?php error_reporting(0); // 禁用所有錯誤報告(不推薦) error_reporting(E_ALL ^ E_NOTICE); // 排除 Notice(同上,異寫法) error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE); // 排除 Warning 和 Notice error_reporting(E_ERROR | E_WARNING | E_PARSE); // 僅顯示嚴重錯誤 error_reporting(E_ALL); // 顯示所有錯誤(開發環境) ?>
E_ALL,盡早發現潛在 BugE_ALL & ~E_NOTICE 或 E_ALL ^ E_NOTICEerror_reporting(0) 搭配 ini_set('display_errors', '0'),改由日誌記錄錯誤isset()、empty()、??(PHP 7+)等防禦性編程習慣,從源頭減少 Notice正確配置錯誤報告層級,不僅能避免醜陋的警告輸出,更能提升系統安全性與專業度。