基礎(chǔ)概要

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

每個(gè) PHP 產(chǎn)生的錯(cuò)誤都包含了類型。可查看 錯(cuò)誤類型清單,它附帶了不同類型行為的簡(jiǎn)短描述和 產(chǎn)生的原因。

PHP 錯(cuò)誤處理

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

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

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

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

用戶的錯(cuò)誤處理器

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