php的錯誤級別

php.ini 文件中有許多配置設置。您應當已經設置好自己的 php.ini 文件並把它放在合適的目錄中,就像在 Linux 上安裝 PHP 和 Apache 2 的文檔說明中所示的那樣。在調試 PHP 應用程序時,應當知道兩個配置變量。下面是這兩個變量及其默認值:
display_errors = Off
error_reporting = E_ALL
通過在 php.ini 文件中搜索它們,可以發現這兩個變量當前的默認值。display_errors 變量的目的很明顯 —— 它告訴 PHP 是否顯示錯誤。默認值是 Off。但是,要讓開發過程更加輕鬆,請把這個值設爲 On:
display_errors = On
error_reporting 變量的默認值是 E_ALL。這個設置會顯示從不良編碼實踐到無害提示到出錯的所有信息。E_ALL 對於開發過程來說有點太細,因爲它在屏幕上爲一些小事(例如變量未初始化)也顯示提示,會搞糟瀏覽器的輸出。我只想看到錯誤和不良編碼實踐,但是不想看到無害的提示。所以,請用以下值代替 error_reporting 的默認值:
error_reporting = E_ALL & ~E_NOTICE

重新啓動 Apache,就全部設置好了。接下來,將學習如何在 Apache 上做同樣的事。

服務器上的錯誤報告
依賴於 Apache 正在做的工作,在 PHP 中打開錯誤報告可能沒法工作,因爲在計算機上可能有多個 PHP 版本。有時很難區分 Apache 正在使用哪個 PHP 版本,因爲 Apache 只能查看一個 php.ini 文件。不知道 Apache 正在使用哪個 php.ini 文件配置自己是一個安全問題。但是,有一種方法可以在 Apache 中配置 PHP 變量,從而保證設置了正確的出錯級別。

而且,最好知道如何在服務器端設置這些配置變量,以否決或搶佔 php.ini 文件,從而提供更高級別的安全性。
在配置 Apache 時,應該已經接觸過 /conf/httpd.conf 中 http.conf 文件中的基本配置。

要做在php.ini文件中已經做過的事,請把下列各行添加到 httpd.conf,覆蓋任何 php.ini 文件:
php_flag display_errors on
php_value error_reporting 2039
這會覆蓋在 php.ini 文件中爲 display_errors 已經設置的標誌,以及 error_reporting 的值。值 2039 代表 E_ALL & ~E_NOTICE。如果願意採用 E_ALL,請把值設爲 2047。同樣,還是要重啓 Apache。
接下來,要在服務器上測試錯誤報告。

關於error_reporting()這個函數,它是可以屏蔽到一些錯誤信息,但是PHP 核心造成的錯誤,是無法屏蔽的,因爲PHP 核心造成的錯誤會直接導致PHP文件編譯失敗,因爲書寫格式沒有按照PHP的編碼規則寫而造成的錯誤,是無法屏蔽的

定義和用法:
error_reporting() 設置 PHP 的報錯級別並返回當前級別。
函數語法:
error_reporting(report_level)
如果參數 level 未指定,當前報錯級別將被返回。下面幾項是 level 可能的值:
值 常量 描述

現在,我將其總結如下:

數字 常量 說明
1 E_ERROR 致命錯誤,腳本執行中斷,就是腳本中有不可識別的東西出現
舉例: Error:Invalid parameters. Invalid parameter name
2 E_WARNING 部分代碼出錯,但不影響整體運行
舉例: Warning: require_once(E:/include/config_base.php)
4 E_PARSE 字符、變量或結束的地方寫規範有誤
舉例:  Parse error: syntax error, unexpected $end in
8  E_NOTICE 一般通知,如變量未定義等
舉例:  Notice: Undefined variable: p in E:\web\index.php on line 17
16 E_CORE_ERROR PHP進程在啓動時,發生了致命性錯誤
舉例:  暫無
32 E_CORE_WARNING 在PHP啓動時警告(非致命性錯誤)
舉例:  暫無
64 E_COMPILE_ERROR 編譯時致命性錯誤
舉例:  暫無
128 E_COMPILE_WARNING 編譯時警告級錯誤
舉例:  暫無
256 E_USER_ERROR 用戶自定義的錯誤消息
舉例:  暫無
512 E_USER_WARNING 用戶自定義的警告消息
舉例:  暫無
1024 E_USER_NOTICE 用戶自定義的提醒消息
舉例:  暫無
2047 E_ALL 以上所有的報錯信息,但不包括E_STRICT的報錯信息
舉例:  暫無
2048 E_STRICT 編碼標準化警告,允許PHP建議如何修改代碼以確保最佳的互操作性向前兼容性。

error_reporting 變量的默認值是  E_ALL & ~E_NOTICE
開發時,最佳的值爲: E_ALL | E_STRICT

如果設置爲:error_reporting(E_ALL | E_STRICT),則表示記錄所有的錯誤信息
可能會導致網站出現一大堆的錯誤代碼;但是對於程序員來說應該說是一件好事,可以把代碼優化到最優; 一些非致命性錯誤雖然不影響程序的運行,但是會加重PHP的負擔.
最後,曬出英文版的對照表:

1 E_ERROR Fatal run-time errors. Errors that can not be recovered from. Execution of the script is halted
2 E_WARNING Non-fatal run-time errors. Execution of the script is not halted
4 E_PARSE Compile-time parse errors. Parse errors should only be generated by the parser
8 E_NOTICE Run-time notices. The script found something that might be an error, but could also happen when running a script normally
16 E_CORE_ERROR Fatal errors at PHP startup. This is like an E_ERROR in the PHP core
32 E_CORE_WARNING Non-fatal errors at PHP startup. This is like an E_WARNING in the PHP core
64 E_COMPILE_ERROR Fatal compile-time errors. This is like an E_ERROR generated by the Zend Scripting Engine
128 E_COMPILE_WARNING Non-fatal compile-time errors. This is like an E_WARNING generated by the Zend Scripting Engine
256 E_USER_ERROR Fatal user-generated error. This is like an E_ERROR set by the programmer using the PHP function trigger_error()
512 E_USER_WARNING Non-fatal user-generated warning. This is like an E_WARNING set by the programmer using the PHP function trigger_error()
1024 E_USER_NOTICE User-generated notice. This is like an E_NOTICE set by the programmer using the PHP function trigger_error()
2048 E_STRICT Run-time notices. PHP suggest changes to your code to help interoperability and compatibility of the code
4096 E_RECOVERABLE_ERROR Catchable fatal error. This is like an E_ERROR but can be caught by a user defined handle (see also set_error_handler())
8191 E_ALL All errors and warnings, except level E_STRICT (E_STRICT will be part of E_ALL as of PHP 6.0)
發佈了27 篇原創文章 · 獲贊 1 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章