PHP 錯誤處理機制

2022-09-17 05:21:11 字數 3548 閱讀 1073

在日常的專案開發過程中,總是會出現一些我們意想不到的異常錯誤,如果我們對此沒有進行相對完善的處理,那麼程式看上去也很不專業,也很可能就會成為別人攻擊系統的有效資訊;有些錯誤異常會終止指令碼執行,這個時候如果沒有一些錯誤提示資訊的話,那麼我們只能從頭開始看**了,要知道專案中成百上千行的**對我們來說是件多麼恐怖的事情啊,那麼我們如何在專案開發的過程中快速準確地定位到異常、錯誤呢,並進行相應的處理,本文由自己對錯誤、異常處理的了解,再此分享與大家相互學習交流,並作為乙個備忘。

系統錯誤處理器

php正常情況下,錯誤會正常的輸出,但在一些框架中,可能會影響錯誤的輸出,可能是框架本身有自己的處理機制,也可能**中作處理了,一般是這幾個函式設定:

1.error_reporting();  設定php 的報錯級別並返回當前級別

error_reporting(report_level)

如果引數 level 

未指定,當前報錯級別將被返回。下面幾項是 

level 

可能的值:值常量

描述e_error

致命的執行時錯誤。不能**此錯誤。指令碼被中斷執行。

e_warning

非致命的執行時警告。指令碼不被中斷執行。

e_parse

編譯時分析錯誤。解析應該只由分析器生成的錯誤

e_notice

執行時通知。該指令碼發現可能是乙個錯誤,但通常執行乙個指令碼時,也可能發生

e_core_error

致命錯誤在php

啟動時。這就好比在php

核心的e_error

e_core_warning

在php

啟動時警告。這就好比在php

核心的e_warning

e_compile_error

致命的編譯時錯誤。這就好比通過了zend

指令碼引擎產生的

e_error

e_compile_warning

非致命編譯時警告。這就好比通過了zend

指令碼引擎產生

e_warning

e_user_error

致命的使用者生成的錯誤,這類似於程式設計師使用php函式 

trigger_error() 

設定的 

e_error

e_user_warning

非致命的使用者生成的警告,這類似於程式設計師使用php函式 

trigger_error 

設定的 

e_warning

e_user_notice

使用者生成的通知,這類似於程式設計師使用php函式

trigger_error 

設定的 

e_notice

e_strict

執行時通知。php

建議改變你的**,以幫助該**的互操作性和相容性

e_recoverable_error

可捕獲的致命錯誤,類似 e_error

,但可被使用者定義的處理程式捕獲(參見 

set_error_handler()

)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"。

錯誤處理函式,如果必要,使用者定義的錯誤處理程式必須終止 

(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把許多異常看作錯誤,這樣就可以把這些異常想錯誤一樣用set error handler接管,進而主動丟擲異常。比如以下warning型別的錯誤是捕獲不到的 warning division by zero in ...

PHP的錯誤處理機制

php的錯誤處理是比較複雜的,本文講解php中所有錯誤相關的重要知識點做一次梳理,便於理解php的錯誤機制.在此之前,先熟悉一下php error的基礎知識 定義了所有php的錯誤型別常量,每乙個常量都是乙個整型數值,它的作用在於 上面的值 數值或者符號 用於建立乙個二進位制位掩碼,來制定要報告的錯...