要選擇使用Error_reporting還是ini_set,需明確需求。若僅設置錯誤報告級別,應使用error_reporting,如error_reporting(e_warning | e_error);若需動態修改其他配置,則用ini_set,如ini_set(‘display_errors’, ‘off’);二者區別在于,error_reporting作用于當前腳本,而ini_set修改的配置可能影響全局;使用ini_set修改error_reporting存在風險,可能降低代碼可讀性,并可能被服務器限制;常用錯誤級別包括e_all、e_error、e_warning等,可按需組合;生產環境建議關閉錯誤顯示并啟用日志記錄,如設置display_errors=off、log_errors=on及指定error_log路徑,同時采用e_all & ~e_notice & ~e_deprecated作為報告級別以兼顧全面性與簡潔性。
php中error_reporting和ini_set都用于錯誤處理,但作用范圍和生效時機有所不同。error_reporting主要用于設置php腳本在運行時應該報告哪種級別的錯誤,而ini_set則用于在運行時修改PHP的配置選項,包括錯誤相關的選項,但不僅限于錯誤。簡單來說,一個管錯誤報告級別,一個管配置。
配置錯誤報告,讓代碼更健壯。
如何選擇使用 error_reporting 還是 ini_set 來配置錯誤處理?
選擇哪個取決于你想做什么。如果你只是想設置腳本的錯誤報告級別,error_reporting就足夠了,也更直接。例如,只顯示警告和錯誤,可以這樣寫:error_reporting(E_WARNING | E_ERROR);。
立即學習“PHP免費學習筆記(深入)”;
但如果需要修改其他的PHP配置選項,或者需要在運行時動態地改變某些設置,ini_set就更靈活。比如,你想臨時關閉錯誤顯示,可以這樣:ini_set(‘display_errors’, ‘Off’);。
還有一個區別,error_reporting的作用域僅限于當前腳本,而ini_set修改的配置選項可能會影響到其他腳本,這取決于配置選項的類型和作用域。
使用 ini_set 修改 error_reporting 有什么風險?
雖然可以使用ini_set(‘error_reporting’, E_ALL);來修改錯誤報告級別,但不推薦這樣做。直接使用error_reporting()更清晰,意圖更明確。而且,ini_set主要用于修改PHP的配置選項,如果用它來做error_reporting的事情,可能會讓代碼的可讀性降低。
另外,有些服務器環境可能會禁用ini_set修改某些配置選項,特別是那些涉及到安全性的選項。所以,最好還是使用error_reporting()來控制錯誤報告級別。
error_reporting 的常用級別有哪些?
error_reporting的級別有很多,常用的包括:
- E_ALL: 報告所有錯誤和警告(除了E_STRICT,在PHP 5.4之后包含)。
- E_ERROR: 報告致命的運行時錯誤。
- E_WARNING: 報告運行時警告(非致命錯誤)。
- E_NOTICE: 報告運行時提醒(可能的問題)。
- E_PARSE: 報告編譯時語法解析錯誤。
- E_STRICT: 建議性的運行時錯誤(幫助編寫更好的代碼)。
- E_DEPRECATED: 報告不建議使用的特性。
可以根據需要組合使用這些級別,例如error_reporting(E_ALL & ~E_NOTICE);表示報告所有錯誤,但不包括E_NOTICE。
如何在生產環境中配置 error_reporting 和 display_errors?
在生產環境中,通常建議關閉錯誤顯示,避免向用戶暴露敏感信息。可以通過ini_set(‘display_errors’, ‘Off’);或者在php.ini文件中設置display_errors = Off來實現。
同時,建議開啟錯誤日志,將錯誤信息記錄到文件中,方便排查問題。可以通過ini_set(‘log_errors’, ‘On’);和ini_set(‘error_log’, ‘/path/to/error.log’);來設置。
錯誤報告級別可以設置為E_ALL & ~E_NOTICE & ~E_DEPRECATED,這樣可以報告所有重要的錯誤,但忽略不重要的提醒和不建議使用的特性。這樣既能及時發現問題,又不會產生過多的噪音。