PHP中的錯誤處理機制
常見的三種錯誤:
1.Notice :通知性錯誤,最小的錯誤,當發生通知性錯誤時,會彈出一個提示信息。不會中斷代碼的執行。
錯誤代碼:
#例如
Notice: in I:\www\abc\error.php on line 2
2.Warning:警告性錯誤,當發生警告性錯誤後,會彈出一個警告信息,他不會中斷程序向下運行。
#例如 Warning: in I:\www\abc\error.php on line 2
3.Error:致命性錯誤,當發生致命性錯誤後,會彈出一個致命錯誤信息,中斷程序執行。
#例如 Fatal error: in I:\www\abc\error.php on line 2
上面是常見的3中PHP中的錯誤,跟多詳細錯誤看下面代碼:
#查看更多錯誤,可以調用系統函數get_defined_constants這個函數 #簡答的展示一些: echo "<pre>"; var_dump(get_defined_constants()); array(1326) { ["E_ERROR"]=> int(1) ["E_RECOVERABLE_ERROR"]=> int(4096) ["E_WARNING"]=> int(2) ["E_PARSE"]=> int(4) ["E_NOTICE"]=> int(8) ["E_STRICT"]=> int(2048) ["E_DEPRECATED"]=> int(8192) ["E_CORE_ERROR"]=> int(16) ["E_CORE_WARNING"]=> int(32) ["E_COMPILE_ERROR"]=> int(64) ["E_COMPILE_WARNING"]=> int(128) ["E_USER_ERROR"]=> int(256) ["E_USER_WARNING"]=> int(512) ["E_USER_NOTICE"]=> int(1024) ["E_USER_DEPRECATED"]=> int(16384) ["E_ALL"]=> int(32767) ["DEBUG_BACKTRACE_PROVIDE_OBJECT"]=> int(1) ["DEBUG_BACKTRACE_IGNORE_ARGS"]=> int(2) ["TRUE"]=> bool(true) ["FALSE"]=> bool(false) ["NULL"]=>]; ~~~~還有更多。
錯誤的觸發:
可以分為兩種:
1.系統自動觸發
系統自動檢查程序的編譯以及執行,在出錯的時候,自動給出錯誤提示。
2.手動觸發:
PHP中手動觸發可以調用系統函數,一般用來調試相應的錯誤程序,一般是用戶級別的錯誤。
觸發的函數:trigger_error
第一個參數可以設置錯誤提示信息,第二個參數可以設置錯誤的級別
E_USER_NOTICE:觸發通知級別錯誤,最低級別的用戶錯誤
E_USER_WARNING:觸發警告級別的錯誤,後續代碼繼續執行
E_USER_ERROR:觸發致命錯誤級別的錯誤,後續代碼終止執行。
錯誤顯示開關:
在php.ini中配置display_errors選項,默認為on,顯示錯誤提示,在開發階段建議設置on,便於項目的調試。產品上線設置為off,用戶體驗好,安全性高,該設置一直有效。
也可以在腳本中執行ini_set函數,設置dispaly_errors的值,只能在腳本生命周期內,無法修改php.ini文件時,可以采用該方式,腳本周期結束,選項恢復。
設置錯誤顯示的級別:
設置錯誤報告的級別後,可以決定來顯示什麽級別的錯誤信息。
在php.ini中配置error_reporting選項,默認設置為顯示所有的錯誤:
設置錯誤報告的級別後,可以決定來顯示什麽級別的錯誤信息。
E_ALL:顯示所有的錯誤
E_NOTICE:顯示通知性的錯誤
E_WARING:顯示警告性的錯誤
E_ERROR:顯示致命性的錯誤
同樣也可以調用ini_set函數設置。
錯誤日誌:
錯誤日誌設置:
一般項目上線需要記錄錯誤日誌,用於檢查系統錯誤,默認日誌開關開啟。
錯誤日誌的默認路徑
apache:
apache/logs/error.log
Nginx:
/var/log/nginx/error.log
自定義錯誤日誌存儲路徑:
ini_set(‘error_log‘,‘路徑‘);
只能設置一次有效,腳本生命周期結束,記錄結束。
自定義錯誤處理處理器:
出現錯誤時,默認使用系統的錯誤處理機制來提示錯誤信息,可以提示什麽級別的錯誤,錯誤提示字符串,發生錯誤的文件以及行號等。
可以自定義設置錯誤提示:
寫一個自定義錯誤處理函數
my_error
有四個參數
$errCode:錯誤代號
$errStr:錯誤提示
$errFile:錯誤文件
$errLine:錯誤行號
默認不會調用,必須調用set_error_handler函數設置為系統自動調用這個函數。
先到這把,歡迎繼續補充~~~,本人微信meng199898,轉帖需備註
PHP中的錯誤處理機制