php錯誤處理

錯誤的分類

語法錯誤:程序沒法運行,直接提示語法錯誤

運行時錯誤:只有程序運行到某行,或在某些特定的情形下運行時纔會發生的錯誤(主要面對)

邏輯錯誤:程序從頭到尾都沒有發生(並提示)錯誤,但程序運行結果錯誤

 

錯誤分級

每個級別的錯誤,對應一個內部的名稱—系統常量

系統錯誤:E_ERROR(嚴重錯誤,一發生,系統立即停止)、E_WARNING、E_NOTICE

E_ERROR=1(系統錯誤)

E_WARNING=2(系統警告)

E_PARSE=4(語法錯誤)

E_NOTICE=8(系統提示)

(系統內部的整數常量,這些常量是我們對該類錯誤進行控制的標識符)

用戶自定義錯誤

只有3個:E_USER_ERROR、E_USER_ WARNING、E_USER_ NOTICE

可以在程序中,自己創建錯誤---是爲了針對某些數據的不合理情形,而創建的錯誤(如年齡超過188等)

其他

E_ALL:代表所有錯誤

E_STRICT:代表嚴格性語法錯誤(當前php版本可執行但不歡迎使用)

 

錯誤的觸發

正常觸發:程序執行過程中體現出來

人工觸發:程序員通過程序代碼而產生的一個錯誤

    trigger_error(“錯誤描述信息”,用戶錯誤代號);

顯示錯誤報告

display_errors:控制是否顯示

error_reporting:控制顯示哪些級別的錯誤

控制的方式有兩種:

Php.ini文件中:對系統中所有運行的php程序都有效

display_errors=On/Off

error_reporting= E_NOTICE (只顯示notice這一級別錯誤提示)

error_reporting= E_NOTICE | E_WARNING(顯示notice和warning一級別錯誤提示)

error_reporting= E_NOTICE & E_WARNING(什麼都不顯示)

error_reporting= E_ALL(顯示所有,但不包含strict錯誤)

error_reporting= E_ALL | E_STRICT(顯示所有錯誤,開發中最常用)

如果在顯示所有錯誤的基礎上,關閉個別錯誤,與狀態設定(關閉)的原理一致,在顯示所有錯誤的基礎上將個別錯誤取反並做按位與運算

在網頁代碼中,隻影響當前的網頁代碼(優先級別高)

ini_set(“控制項”,值);(幾乎可以設定所有php.ini中的設定項  ini_get(“設定項名稱”)用戶獲取某項的值)

示例: ini_set(“display_errors”,1);//1表示顯示,0表示不顯示

ini_set(“error_reporting”, E_NOTICE);(只顯示notice這一級別錯誤提示)

記錄錯誤日誌(2種途徑)

 log_errors:控制是否記錄錯誤日誌

error_log:控制錯誤日誌記錄到哪裏,給定一個文件名就可以

一個特殊值:syslog,會記錄到操作系統日誌中,而不會記錄到文件

Php.ini中:

  log_errors=On

error_log=“錯誤日誌文件名”(沒有給定路徑,系統會在每個文件夾下建立文件並記錄進去)

當前文件中使用ini_set(“log_errors”,On);

自定義錯誤處理器

就是自己控制錯誤的顯示內容和記錄內容

分兩步完成:

1.設定自定義錯誤處理函數

set_error_handler(“函數名”);

2.定義該函數(並通常需要設定4個參數)

function error_handler($errNo,$errMsg,$errFile,$errLine){

 // 處理該4個參數

}

 

注意:該函數無需手工調用,出錯時會自動調用;一旦用自定義錯誤,則系統不在出錯誤處理;如果系統發生嚴重錯誤,則不會調用自定函數,由系統處理(顯示並終止)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章