php攔截異常可以通過php的錯誤、異常機制及其內建數』set_exception_handler』、『set_error_handler』、『register_shutdown_function』 來寫。
『set_exception_handler』 函式 用於攔截各種未捕獲的異常,然後將這些交給使用者自定義的方式進行處理
『register_shutdown_function』 函式是在php指令碼結束時呼叫的函式,配合』error_get_last』可以獲取最後的致命性錯誤
這個思路大體就是把錯誤、異常、致命性錯誤攔截下來,交給我們自定義的方法進行處理,我們辨別這些錯誤、異常是否致命,如果是則記錄的資料庫或者檔案系統,然後使用指令碼不停的掃瞄這些日誌,發現嚴重錯誤立即傳送郵件或傳送簡訊進行報警
首先我們定義錯誤攔截類,該類用於將錯誤、異常攔截下來,用我們自己定義的處理方式進行處理,該類放在檔名為』errorhandler.class.php』中,**如下:
/**
* 檔名稱:baseerrorhandler.class.php
* 摘 要:錯誤***父類
*/require
'errorhandlerexception.class.php'
;//異常類
class
errorhandler
/*** 方 法:取消自定義錯誤、異常***
* 參 數:void
* 返 回:void
*/public
function
unregister()
/*** 方 法:處理截獲的未捕獲的異常
* 參 數:exception $exception
* 返 回:void
*/public
function
handleexception
($exception
)catch
(exception $e)}
/*** 方 法:處理截獲的錯誤
* 參 數:int $code 錯誤**
* 參 數:string $message 錯誤資訊
* 參 數:string $file 錯誤檔案
* 參 數:int $line 錯誤的行數
* 返 回:boolean
*/public
function
handleerror
($code
,$message
,$file
,$line)}
throw
$exception;}
return
false;}
/*** 方 法:截獲致命性錯誤
* 參 數:void
* 返 回:void
*/public
function
handlefatalerror()
}/**
* 方 法:獲取伺服器ip
* 參 數:void
* 返 回:string
*/final
public
function
getserverip()
elseif
(isset
($_server
['local_addr'])
)elseif
(isset
($_server
['hostname'])
)else
return
$serverip;}
/*** 方 法:獲取當前uri資訊
* 參 數:void
* 返 回:string $url
*/public
function
getcurrenturi()
else
}return
$uri;}
/*** 方 法:記錄異常資訊
* 參 數:errorhandlerexception $e 錯誤異常
* 返 回:boolean 是否儲存成功
*/final
public
function
logexception($e
)while($e
=$e->
getprevious()
);$error
['message']=
implode
("\r\n"
,$error
['message'])
;$this
->
logerror
($error);
}/**
* 方 法:記錄異常資訊
* 參 數:array $error = array(
* 'time' => int,
* 'title' => 'string',
* 'message' => 'string',
* 'code' => int,
* 'server_ip' => 'string'
* 'file' => 'string',
* 'line' => int,
* 'url' => 'string',
* );
* 返 回:boolean 是否儲存成功
*/public
function
logerror
($error
)}
上述**中,有個』errorhandlerexception』類,該類放在檔案』errorhandlerexception.class.php』中,該類用於將錯誤轉換為異常,以便記錄錯誤發生的檔案、行號、錯誤**、錯誤資訊等資訊,同時其方法』isfatalerror』用於辨別該錯誤是否是致命性錯誤。 Spring aop 實現異常攔截
使用aop異常掛載功能可以統一處理方法丟擲的異常,減少很多重複 實現如下 1 實現throwadvice 1 public class exceptionhandler implements throwsadvice 8 1 bean id exceptionhandler class com.lz...
php的核心擴充套件怎麼寫
方法 一 用c去寫php的核心擴充套件,然後php就像呼叫原生函式一樣呼叫 舉例如下 php crypto.c include stdio.h include php.h include php crypto.h include netpayclient.h php function signord...
攔截自定義異常
1.通用返回response import lombok.allargsconstructor import lombok.data import lombok.noargsconstructor 通用返回response data allargsconstructor noargsconstruc...