PHP 對一些內部的錯誤情況進(jìn)行報錯。 這些錯誤可以用來(lái)表示不同的情況,可以根據需要將錯誤顯示出來(lái)或記錄到日志中。
每個(gè) PHP 產(chǎn)生的錯誤都包含了類(lèi)型??刹榭? 錯誤類(lèi)型清單,它附帶了不同類(lèi)型行為的簡(jiǎn)短描述和 產(chǎn)生的原因。
當未設置錯誤處理函數時(shí),PHP 會(huì )根據配置處理出現的錯誤。
php.ini 中
error_reporting
的配置或者是運行時(shí)調用
error_reporting() 控制了哪些錯誤需要報告,哪些錯誤需要自動(dòng)忽略。
由于有些錯誤會(huì )在運行用戶(hù)腳本前就可能出現,所以強烈推薦用配置指令來(lái)設置。
在開(kāi)發(fā)環(huán)境里為了發(fā)現并修復 PHP 產(chǎn)生的問(wèn)題,
應該總是把 error_reporting
設置為 E_ALL
。
在生產(chǎn)環(huán)境里,用戶(hù)可能為了降低信息的詳細程度,
想要將它設置為類(lèi)似 E_ALL & ~E_NOTICE & ~E_DEPRECATED
,
但很多情況下 E_ALL
也同樣適用,這樣可以更早地警告潛在問(wèn)題。
PHP 對這些錯誤的處理方式,取決于兩個(gè)更深的 php.ini 指令。
display_errors
控制了是否要將錯誤作為腳本輸出的一部分顯示。
在生產(chǎn)環(huán)境里應該禁用,因為可能包含類(lèi)似數據庫密碼這樣的敏感信息,
而在開(kāi)發(fā)環(huán)境中應該啟用,能確保立即報告問(wèn)題。
PHP 不僅能顯示錯誤,還可以開(kāi)啟 log_errors
指令來(lái)記錄錯誤日志。它能根據 error_log
的設置,記錄任意錯誤到文件或者 syslog。
特別適用于生產(chǎn)環(huán)境,用戶(hù)可以記錄發(fā)生的錯誤,并根據這些錯誤生成報告。
如果 PHP 默認錯誤處理器還不能滿(mǎn)足要求,用戶(hù)可以通過(guò) set_error_handler() 設置自定義錯誤處理器,可處理很多類(lèi)型的錯誤。 雖然有些類(lèi)型的錯誤不能通過(guò)這種方式處理,但能處理的類(lèi)型可以用腳本合適的方式處理: 例如為用戶(hù)顯示自定義錯誤頁(yè)面,同時(shí)以一種比日志更直接的方式上報錯誤,例如發(fā)送郵件。