1. 程式人生 > >PHP中的錯誤處理機制

PHP中的錯誤處理機制

無法 警告 安全 port 路徑 錯誤提示 執行 手動 var

常見的三種錯誤:

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中的錯誤處理機制