基礎概要

PHP 對一些內部的錯誤情況進行報錯。 這些錯誤可以用來表示不同的情況,可以根據需要將錯誤顯示出來或記錄到日志中。

每個 PHP 產生的錯誤都包含了類型??刹榭? 錯誤類型清單,它附帶了不同類型行為的簡短描述和 產生的原因。

PHP 錯誤處理

當未設置錯誤處理函數時,PHP 會根據配置處理出現的錯誤。 php.ini 中 error_reporting 的配置或者是運行時調用 error_reporting() 控制了哪些錯誤需要報告,哪些錯誤需要自動忽略。 由于有些錯誤會在運行用戶腳本前就可能出現,所以強烈推薦用配置指令來設置。

在開發(fā)環(huán)境里為了發(fā)現并修復 PHP 產生的問題, 應該總是把 error_reporting 設置為 E_ALL。 在生產環(huán)境里,用戶可能為了降低信息的詳細程度, 想要將它設置為類似 E_ALL & ~E_NOTICE & ~E_DEPRECATED, 但很多情況下 E_ALL 也同樣適用,這樣可以更早地警告潛在問題。

PHP 對這些錯誤的處理方式,取決于兩個更深的 php.ini 指令。 display_errors 控制了是否要將錯誤作為腳本輸出的一部分顯示。 在生產環(huán)境里應該禁用,因為可能包含類似數據庫密碼這樣的敏感信息, 而在開發(fā)環(huán)境中應該啟用,能確保立即報告問題。

PHP 不僅能顯示錯誤,還可以開啟 log_errors 指令來記錄錯誤日志。它能根據 error_log 的設置,記錄任意錯誤到文件或者 syslog。 特別適用于生產環(huán)境,用戶可以記錄發(fā)生的錯誤,并根據這些錯誤生成報告。

用戶的錯誤處理器

如果 PHP 默認錯誤處理器還不能滿足要求,用戶可以通過 set_error_handler() 設置自定義錯誤處理器,可處理很多類型的錯誤。 雖然有些類型的錯誤不能通過這種方式處理,但能處理的類型可以用腳本合適的方式處理: 例如為用戶顯示自定義錯誤頁面,同時以一種比日志更直接的方式上報錯誤,例如發(fā)送郵件。