錯誤的分類
語法錯誤:程序沒法運行,直接提示語法錯誤
運行時錯誤:只有程序運行到某行,或在某些特定的情形下運行時纔會發生的錯誤(主要面對)
邏輯錯誤:程序從頭到尾都沒有發生(並提示)錯誤,但程序運行結果錯誤
錯誤分級
每個級別的錯誤,對應一個內部的名稱—系統常量
系統錯誤: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個參數
}
注意:該函數無需手工調用,出錯時會自動調用;一旦用自定義錯誤,則系統不在出錯誤處理;如果系統發生嚴重錯誤,則不會調用自定函數,由系統處理(顯示並終止)