在日常的專案開發過程中,總是會出現一些我們意想不到的異常錯誤,如果我們對此沒有進行相對完善的處理,那麼程式看上去也很不專業,也很可能就會成為別人攻擊系統的有效資訊;有些錯誤異常會終止指令碼執行,這個時候如果沒有一些錯誤提示資訊的話,那麼我們只能從頭開始看**了,要知道專案中成百上千行的**對我們來說是件多麼恐怖的事情啊,那麼我們如何在專案開發的過程中快速準確地定位到異常、錯誤呢,並進行相應的處理,本文由自己對錯誤、異常處理的了解,再此分享與大家相互學習交流,並作為乙個備忘。
系統錯誤處理器:
php正常情況下,錯誤會正常的輸出,但在一些框架中,可能會影響錯誤的輸出,可能是框架本身有自己的處理機制,也可能**中作處理了,一般是這幾個函式設定:
1.error_reporting(); 設定php 的報錯級別並返回當前級別
error_reporting(report_level)
如果引數 level 未指定,當前報錯級別將被返回。下面幾項是 level 可能的值:
程式設計客棧 值常量
描述1
e_error
致命的執行時錯誤。不能**此錯誤。指令碼被中斷執行。
2e_warning
非致命的執行時警告。指令碼不被中斷執行。
4程式設計客棧 e_parse
編譯時分析錯誤。解析應該只由分析器生成的錯誤
8e_notice
執行時通知。該指令碼發現可能是乙個錯誤,但通常執行乙個指令碼時,也可能發生
16e_core_error
致命錯誤在php啟動時。這就好比在php核心的e_error
32e_core_warning
在php啟動時警告。這就好比在php核心的e_warning
64e_compile_error
致命的編譯時錯誤。這就好比通過了zend指令碼引擎產生的e_error
128e_compile_warning
非致命編譯時警告。這就好比通過了zend指令碼www.cppcns.com引擎產生e_warning
256e_user_error
致命的使用者生成的錯誤,這類似於程式設計師使用php函式 trigger_error() 設定的 e_error
512e_user_warning
非致命的使用者生成的警告,這類似於程式設計師使用php函式 trigger_error 設定的 e_warning
1024
e_user_notice
使用者生成的通知,這類似於程式設計師使用php函式trigger_error 設定的 e_notice
2048
e_strict
執行時通知。php建議改變你的**,以幫助該**的互操作性和相容性
4096
e_recoverable_error
可捕獲的致命錯誤,類似 e_error,但可被使用者定義的處理程式捕獲(參見 set_error_handler())
8191
e_all
所有的錯誤和警告,除級別e_strict(在php6.0中,e_strict將是e_all的一部分)
這裡值得注意的是,$level為0的時候是關閉錯誤輸出,也就是任何錯誤都不會輸出。
2.set_error_handler()
定義和用法
set_error_handler() 函式設定使用者自定義的錯誤處理函式。
該函式用於建立執行時期間的使用者自己的錯誤處理方法。
該函式會返回舊的錯誤處理程式,若失敗,則返回 null。
語法set_error_handler(error_function,error_types)
引數描述
error_function
必需。規定發生錯誤時執行的函式。
error_types
可選。規定在哪個錯誤報告級別會顯示使用者定義的錯誤。預設是 "e_all"。
提示:如果使用了該函式,會完全繞過標準的 php 錯誤處理函式,如果必要,使用者定義的錯誤處理程式必須終止 (die() ) 指令碼,
注釋:如果在指令碼執行前發生錯誤,由於在那時自定義程式還沒有註冊,因此就不會用到這個自定義錯誤處理程式。
測試**如下:
/*** * @param type $error_level 錯誤級別
* @param type $error_message 錯誤資訊
* @param type $error_file 可選 錯誤檔案
* @param type $error_line 可選 錯誤行
* @param type $error_context 可選。規定乙個陣列,包含了當錯誤發生時在用的每個變數以及它們的值。
*/function my_error($error_level, $error_message, $error_file, $error_line, $error_context)
set_error_handler('my_error', e_all);
print_r($a);
//通過上案例可以得知,在註冊 my_error 方法時,系統會自動覆蓋原有的錯誤處理 error_fuction() 方法
以上程式執行結果:
自定義錯誤觸發器
定義和用法
trigger_error() 函式建立使用者定義的錯誤訊息。
trigger_error() 用於在使用者指定的條件下觸發乙個錯誤訊息。它與內建的錯誤處理器一同使用,也可以與由 set_error_handler() 函式建立的使用者自定義函式使用。
如果指定了乙個不合法的錯誤型別,該函式返回 false,否則返回 true。
語法trigger_error(error_message,error_types)
引數描述
error_message
必需。規定錯誤消程式設計客棧息。長度限制為 1024 個字元。
error_types
可選。規定錯誤訊息的錯誤型別。 可能的值:
測試**如下:
/*** * @param type $level
* @param type $msg
*/function my_error($level, $msg)
echo "錯誤編號:" . $level . "
"; echo "錯誤資訊:" . $msg;
}//註冊錯誤處理器
set_error_handler('my_error');
if (89 > 8)
執行結果如下:
warning:
錯誤編號:512
錯誤資訊:這是錯誤啊
本文標題: php 錯誤處理機制
本文位址:
PHP 錯誤處理機制
在日常的專案開發過程中,總是會出現一些我們意想不到的異常錯誤,如果我們對此沒有進行相對完善的處理,那麼程式看上去也很不專業,也很可能就會成為別人攻擊系統的有效資訊 有些錯誤異常會終止指令碼執行,這個時候如果沒有一些錯誤提示資訊的話,那麼我們只能從頭開始看 了,要知道專案中成百上千行的 對我們來說是件...
php中錯誤處理機制
php中,異常處理機制是有限的,無法自動丟擲異常,必須手動進行,並且內建異常有限。php把許多異常看作錯誤,這樣就可以把這些異常想錯誤一樣用set error handler接管,進而主動丟擲異常。比如以下warning型別的錯誤是捕獲不到的 warning division by zero in ...
PHP的錯誤處理機制
php的錯誤處理是比較複雜的,本文講解php中所有錯誤相關的重要知識點做一次梳理,便於理解php的錯誤機制.在此之前,先熟悉一下php error的基礎知識 定義了所有php的錯誤型別常量,每乙個常量都是乙個整型數值,它的作用在於 上面的值 數值或者符號 用於建立乙個二進位制位掩碼,來制定要報告的錯...