PHP的錯誤級別

科技小能手發表於2017-11-12

php 中的錯誤級別有:

1 E_ERROR (integer) 致命的執行時錯誤。這類錯誤一般是不可恢復的情況,例如記憶體分配導致的問題。後果是導致指令碼終止不再繼續執行。
2 E_WARNING (integer) 執行時警告 (非致命錯誤)。僅給出提示資訊,但是指令碼不會終止執行。
4 E_PARSE (integer) 編譯時語法解析錯誤。解析錯誤僅僅由分析器產生。
8 E_NOTICE (integer) 執行時通知。表示指令碼遇到可能會表現為錯誤的情況,但是在可以正常執行的指令碼里面也可能會有類似的通知。
16 E_CORE_ERROR(integer) 在PHP初始化啟動過程中發生的致命錯誤。該錯誤類似E_ERROR,但是是由PHP引擎核心產生的。 since PHP 4
32 E_CORE_WARNING(integer) PHP初始化啟動過程中發生的警告 (非致命錯誤) 。類似 E_WARNING,但是是由PHP引擎核心產生的。 since PHP 4
64 E_COMPILE_ERROR(integer) 致命編譯時錯誤。類似E_ERROR, 但是是由Zend指令碼引擎產生的。 since PHP 4
128 E_COMPILE_WARNING(integer) 編譯時警告 (非致命錯誤)。類似 E_WARNING,但是是由Zend指令碼引擎產生的。 since PHP 4
256 E_USER_ERROR(integer) 使用者產生的錯誤資訊。類似 E_ERROR, 但是是由使用者自己在程式碼中使用PHP函式 trigger_error()來產生的。 since PHP 4
512 E_USER_WARNING(integer) 使用者產生的警告資訊。類似 E_WARNING, 但是是由使用者自己在程式碼中使用PHP函式 trigger_error()來產生的。 since PHP 4
1024 E_USER_NOTICE(integer) 使用者產生的通知資訊。類似 E_NOTICE, 但是是由使用者自己在程式碼中使用PHP函式 trigger_error()來產生的。 since PHP 4
2048 E_STRICT (integer) 啟用 PHP 對程式碼的修改建議,以確保程式碼具有最佳的互操作性和向前相容性。 since PHP 5
4096 E_RECOVERABLE_ERROR(integer) 可被捕捉的致命錯誤。 它表示發生了一個可能非常危險的錯誤,但是還沒有導致PHP引擎處於不穩定的狀態。 如果該錯誤沒有被使用者自定義控制程式碼捕獲 (參見 set_error_handler()),將成為一個 E_ERROR 從而指令碼會終止執行。 since PHP 5.2.0
8192 E_DEPRECATED(integer) 執行時通知。啟用後將會對在未來版本中可能無法正常工作的程式碼給出警告。 since PHP 5.3.0
16384 E_USER_DEPRECATED(integer) 使用者產少的警告資訊。 類似 E_DEPRECATED, 但是是由使用者自己在程式碼中使用PHP函式 trigger_error()來產生的。 since PHP 5.3.0
30719 E_ALL (integer) E_STRICT出外的所有錯誤和警告資訊。 30719 in PHP 5.3.x, 6143 in PHP 5.2.x, 2047 previously

錯誤級別用2進位制的值來表示的: 1111 1111 1111 111從左到右,每位上的1,代表一種錯誤級別 

  fatal error致命錯誤: 0000 0000 0000 001 開啟 1 
  warning 警告錯誤 : 0000 0000 0000 010 開啟 2 
  NOTICE 警告 : 0000 0000 0001 000 開啟 8 



設定錯誤報告級別的方法:

1. 修改PHP的配置檔案php.ini

這種方式設定error_reporting後,重啟web伺服器,就會永久生效。

開啟配置檔案php.ini,檢視錯誤報告級別error_reporting的預設值,如下:

error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT

意思是報告所有的錯誤,但除了E_DEPRECATEDE_STRICT這兩種。

將其修改為:

error_reporting=E_ALL &  ~E_NOTICE

意思是報告所有的錯誤,但除了E_NOTICE這一種。這也是最常用的錯誤報告級別,它不會報告注意類(如:使用了未定義的變數)的錯誤。

儲存,重啟web伺服器後生效。

2. 使用error_reporting()函式

這種方式設定後,可以立即生效。但僅限於在當前指令碼中的error_reporting()函式呼叫的後面區域。

int error_reporting ([ int $level ] )

引數可以是整型或對應的常量識別符號,推薦使用常量的形式。返回值為當前位置處起作用的錯誤報告級別的值(整型值)。

注意:配置檔案php.inidisplay_errors的預設值為On,代表顯示錯誤提示,如果設定為Off,就會關閉所有的錯誤提示。

使用 error_reporting(0) 或者在函式前面加 @,可以抑制錯誤輸出,以防止錯誤訊息洩露敏感資訊。


這些錯誤的常見場景:

 Deprecated   現在一般你用mysql 連結資料庫的時候會報這個,表示你最好使用mysqli 或者pdo

Notice   echo $a+8;

Warning  當你使用include 包含檔案的時候,檔案出錯就會返回一個wanrning錯誤

Fatal error  還是require 檔案,檔案出錯時會返回fatal erroe

parse error 語法錯誤



本文轉自 努力的C 51CTO部落格,原文連結:http://blog.51cto.com/fulin0532/1971024


相關文章