錯誤分類
- 語法錯誤
- 運行時錯誤:提示性錯誤,警告性錯誤,致命性錯誤
- 邏輯錯誤
錯誤分級
php語言將各種錯誤作了不同級別的分類,形成了大概有十幾個級別,這就是技術層面的錯誤分級。
每一個級別的錯誤,都有一個代號,其實就是系統內部的一個常量罷了。
- 系統常見錯誤
E_ERROR,值為1,對應二進制0000 0000 0000 0001
E_WARNING,值為2,對應二進制0000 0000 0000 0010
E_NOTICE,值為4,對應二進制0000 0000 0000 0100 - 用戶可自定義錯誤
E_USER_ERROR,
E_USER_WARNING,
E_USER_NOTICE - 其他
E_STRICT //嚴謹性語法檢查錯誤
E_ALL //代表所有錯誤,對應二進制0111 0111 1111 1111
錯誤觸發
有時候我們要求程序觸發錯誤,以糾正某些東西。
用 trigger_error
$age = 800;
if($age > 127 || $age < 0){
trigger_error("年齡不符合要求", E_USER_ERROR); //三種用戶自定義錯誤之一
}else{
echo "輸入年齡正確";
}
錯誤報告顯示
就是將錯誤顯示在網頁上嘛
- 是否顯示錯誤報告
1.在php.ini中,設定display_errors的值,為on或者off
2.直接在php腳本文件中(在頂部?)使用函數 ini_set() 進行設置ini_set("display_errors", 0); //不顯示錯誤 ini_set("display_errors", 1); //顯示錯誤
- 顯示哪些級別的錯誤
1.在php.ini中,error_reporting中設置
有3個值,默認值,開發階段值,產品階段值。
根據不同階段,寫上不同的值就可以了。
error_reporting.PNG
2.在當前php腳本文件中ini_set("error_reporting", E_NOTICE); //顯示一個級別的錯誤 ini_set("error_reporting", E_NOTICE | E_WARNING); //顯示兩個級別的錯誤
錯誤日志記錄問題
- 是否記錄
1.在php.ini中設置,log_errors = on 或 off
2.在腳本中設置ini_set("log_errors", 1),或者0 - 記錄在哪里
1.直接使用一個文件名,此時系統會自動在每個文件夾下都建立該文件名,并用于記錄該文件夾下所有網頁文件的錯誤
2.使用一個特殊文件名字,syslog,此時站點的所有錯誤都記錄到系統的日志文件中,非常少用。控制面板=>管理工具=>時間查看器ini_set("log_errors", "my_error.txt");
ini_set("log_errors", "syslog");
自定義錯誤處理器(函數)
- 設置處理函數的函數名
set_error_handler("func1");
- 定義該函數。不需要調用該函數,發生錯誤的話,會自動調用。這個挺好用的
function func1($errCode, $errMsg, $errFile, $errLine){ //任意寫代碼 echo "發生錯誤"; echo "<br/>錯誤代號為:" . $errCode; echo "<br/>錯誤內容為:" . $errM's'g; echo "<br/>錯誤文件為:" . $errFile; echo "<br/>錯誤行號為:" . $errLine; }