php-錯誤處理
指的是系統(或使用者)在對某些程式碼進行執行的時候,發現有錯誤,就會通過錯誤處理的形式告知程式設計師
1、錯誤分類
-
語法錯誤
使用者書寫的程式碼不符合php的語法規範,語法錯誤會導致程式碼在編譯過程中不通過,所以程式碼不會執行
-
執行時錯誤
程式碼編譯通過,但是程式碼在執行的過程中會出現一些條件不滿足導致的錯誤
-
邏輯錯誤
程式設計師在寫程式碼的時候,不夠規範,出現了一些邏輯性的錯誤,導致程式碼正常執行,但是得不到想要的結果
2、錯誤代號
所有看到的錯誤程式碼在PHP中都被定義成了系統常量(可以直接使用)
1)系統錯誤:
- E_PARSE:編譯錯誤,程式碼不會執行
- E_ERROR: fatal error,致命錯誤,會導致程式碼不能正確繼續執行(出錯的位置斷掉)
- E_WARNING: warning,警告錯誤,不會影響程式碼執行,但是可能得到意想不到的結果
- E_NOTICE: notice,通知錯誤,不會影響程式碼執行
2)使用者錯誤:
E_USER_ERROR,E_USER_WARNING,E_USER_NOTICE 使用者在使用自定義錯誤觸發的時候,會使用到的錯誤代號(系統不會用到)
3)其他:E_ALL,代表著所有從錯誤(通常在進行錯誤控制的時候使用比較多),建議在開發過程中(開發環境)使用。
所有已E開頭的錯誤常量(代號)其實都是由一個位元組儲存,然後每一種錯誤佔據一個對應的位,如果想進行一些錯誤的控制,可以使用位運算進行操作
3、錯誤觸發
//處理指令碼讓瀏覽器按照指定字符集解析的方法
header('Conent-type:text/html;charest=utf-8')
-
程式執行時觸發:系統自動根據錯誤發生後,對比對應的錯誤資訊,輸出給使用者,主要針對程式碼的語法錯誤和執行時錯誤
-
1 $a=100 2 echo $a; 3 //缺少分號
1 $a=10; 2 $b=0 3 if($b==0){ 4 //人為觸發錯誤 5 trigger_error('除數不能為0!') //預設notice,會繼續執行 6 trigger_error('除數不能為0!',E_USER_ERROR) //不會繼續執行7 } 8 echo $a / $b;
- 人為觸發:知道某些邏輯可能會出錯,從而使對應的判斷程式碼來觸發響應的錯誤提示
---哪些錯誤該顯示,以及如何顯示
兩種方式:
-
php的配置檔案:全域性配置,php.ini檔案
display_errors:是否顯示錯誤
on/off
error_reporting:顯示什麼級別的錯誤
E_ALL:全域性
-
可以在執行的php指令碼中設定:在指令碼中定義的配置項級別比配置檔案高(通常在開發當中都會在程式碼中去進行控制和配置)
error_reporting():設定對應的錯誤顯示級別
ini_set(配置檔案中的配置項,配置值)
-
ini_set('error_reporting',E_ALL)
-
ini_set('display_error',1)
-
5、錯誤日誌設定
在實際生產環境中,不會直接讓錯誤赤裸裸的展示給使用者
1、不友好
2、不安全:錯誤會顯示很多資訊
設定:
-
進php.ini中;
-
開啟日誌功能
log_errors=on
-
加error_log='存放路徑/php_errors.log'
6、自定義錯誤處理
最簡單的錯誤處理:trigger _errors()函式,但是該函式不會阻止系統報錯
PHP系統提供了一種使用者處理錯誤的機制:使用者自定義錯誤處理函式,然後將該函式增加作業系統錯誤處理的控制代碼中,然後系統會在碰到錯誤之後,使用使用者定義的錯誤函式。