1. 程式人生 > 實用技巧 >php-錯誤處理

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;

  • 人為觸發:知道某些邏輯可能會出錯,從而使對應的判斷程式碼來觸發響應的錯誤提示

4、錯誤顯示設定

---哪些錯誤該顯示,以及如何顯示

兩種方式:

  • 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系統提供了一種使用者處理錯誤的機制:使用者自定義錯誤處理函式,然後將該函式增加作業系統錯誤處理的控制代碼中,然後系統會在碰到錯誤之後,使用使用者定義的錯誤函式。