在我們的程式開發中,經常會遇到一些程式啟動並執行錯誤,PHP會根據程式的錯誤層級來給出給出不同的提示。例如什麼警告,錯誤等錯誤,但是這些錯誤是可以設定的,如果只是一些小的錯誤,我們可以讓這些錯誤不報出來。這就需要用到我們本章所講解的如何設定PHP的報錯層級。
在PHP中,錯誤層級的設定有兩種方法:
第一種:這種方式設定error_reporting後,重啟web伺服器,就會永久生效。
這裡以xampp整合軟體包為例,開啟設定檔php.ini,查看錯誤報表層級error_reporting的預設值,如下:
error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT
意思是報告所有的錯誤,但除了E_DEPRECATED和E_STRICT這兩種。
將其修改為:
error_reporting=E_ALL & ~E_NOTICE
意思是報告所有的錯誤,但除了E_NOTICE這一種。這也是最常用的錯誤報表層級,它不會報告注意類(如:使用了未定義的變數)的錯誤。
儲存,重啟web伺服器後生效。
第二種:通過error_reporting()函數設定報錯層級,種方式設定後,可以立即生效。但僅限於在當前指令碼中的error_reporting()函數調用的後面地區。
error_reporting()函數的文法如下:
int error_reporting ([ int $level ] )
參數level是指定錯誤的層級,如果沒有設定,會返回當前的報錯層級。下邊是給出level 參數的值。
| 值 |
常量 |
說明 |
| 1 |
E_ERROR |
報告導致指令碼終止啟動並執行致命錯誤
|
| 2 |
E_WARNING |
報告運行時的警告類錯誤(指令碼不會終止運行) |
| 4 |
E_PARSE |
報告編譯時間的文法解析錯誤 |
| 8 |
E_NOTICE |
報告通知類錯誤,指令碼可能會產生錯誤 |
| 16 |
E_CORE_ERROR |
PHP啟動時初始化過程中的致命錯誤。 |
| 32 |
E_CORE_WARNING |
PHP啟動時初始化過程中的警告(非致命性錯)。 |
| 64 |
E_COMPILE_ERROR |
編譯時間致命性錯。這就像由Zend指令碼引擎產生了一個E_ERROR。 |
| 128 |
E_COMPILE_WARNING |
編譯時間警告(非致命性錯)。這就像由Zend指令碼引擎產生了一個E_WARNING警告。 |
| 256 |
E_USER_ERROR |
使用者自訂的警告訊息。這就像由使用PHP函數trigger_error(程式員設定的一個E_WARNING警告) |
| 512 |
E_USER_WARNING |
使用者自訂的警告訊息。這就像由使用PHP函數trigger_error(程式員設定的一個E_WARNING警告) |
| 1024 |
E_USER_NOTICE |
使用者自訂的警告訊息。這就像由使用PHP函數trigger_error(程式員設定的一個E_WARNING警告) |
| 2048 |
E_STRICT |
編碼通訊協定化警告。允許PHP建議如何修改代碼以確保最佳的互通性向前相容性。 |
| 4096 |
E_RECOVERABLE_ERROR |
開捕致命錯誤。這就像一個E_ERROR,但可以通過使用者定義的處理捕獲(又見set_error_handler()) |
| 8191 |
E_ALL |
所有的錯誤和警告(不包括 E_STRICT) (E_STRICT will be part of E_ALL as of PHP 6.0) |
任意數目的以上選項都可以用“或”來串連(用 OR 或 |),這樣可以報告所有需要的各層級錯誤。
例子:
下面的代碼關閉了使用者自訂的錯誤和警告,執行了某些操作,然後恢複到原始的報錯層級:
<?php//禁用錯誤報表error_reporting(0);//報告執行階段錯誤error_reporting(E_ERROR | E_WARNING | E_PARSE);//報告所有錯誤error_reporting(E_ALL);?>
一個簡單的例子是:
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
他表示php錯誤,警告,語法錯誤,提醒都返錯。