基礎(chǔ)概要

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

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

PHP 錯誤處理

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

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

PHP 對這些錯誤的處理方式,取決于兩個更深的 php.ini 指令。 display_errors 控制了是否要將錯誤作為腳本輸出的一部分顯示。 在生產(chǎn)環(huán)境里應(yīng)該禁用,因?yàn)榭赡馨愃茢?shù)據(jù)庫密碼這樣的敏感信息, 而在開發(fā)環(huán)境中應(yīng)該啟用,能確保立即報告問題。

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

用戶的錯誤處理器

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