php的默認(rèn)錯誤處理是將消息輸出浸剩。但是,有時候需要定義一些其他操作,這時就需要自定義錯誤處理函數(shù)。php提供內(nèi)置函數(shù)set_error_handler可以幫助我們注冊自己的錯誤處理函數(shù)(此函數(shù)可以用你自己定義的方式來處理運(yùn)行中的錯誤比如返回json)
在這個異常處理程序被調(diào)用后蜀涨,腳本會停止執(zhí)行
可知,他能夠捕獲一部分錯誤蝎毡,不能捕獲系統(tǒng)級E_ERROR厚柳、E_PARSE等錯誤,但是這部分可以由register_shutdown_function()捕獲
set_error_handler ( callable $error_handler
[, int $error_types
= E_ALL | E_STRICT ] ) : mixed
error_types
里指定的錯誤類型都會繞過 PHP 標(biāo)準(zhǔn)錯誤處理程序沐兵, 除非回調(diào)函數(shù)返回了FALSE
别垮。 error_reporting() 設(shè)置將不會起到作用而你的錯誤函數(shù)繼續(xù)會被調(diào)用
它將接管PHP原生錯誤處理函數(shù),即當(dāng)error_types為E_ALL | E_STRICT時所有的錯誤都會交給自定義的函數(shù)處理
第一個參數(shù)的回調(diào)函數(shù)
error_handler ( int $errno
, string $errstr
[, string $errfile
[, int $errline
[, array $errcontext
]]] ) : bool
function error_handler($errno , $errstr, $errfile, $errline){
echo "錯誤級別的編號errno: $errno<br>";
echo "錯誤信息errstr: $errstr<br>";
echo "出錯文件errfile: $errfile<br>";
echo "出錯行號errline: $errline<br><br>";
}
不支持的錯誤級別: 導(dǎo)致腳本終止的錯誤都不支持
值 | 常量 | 說明 |
---|---|---|
0 | 關(guān)閉錯誤輸出扎谎,即什么錯誤也不輸出 | |
1 | 致命的運(yùn)行時錯誤碳想。這類錯誤一般是不可恢復(fù)的情況,例如內(nèi)存分配導(dǎo)致的問題毁靶。后果是:導(dǎo)致腳本終止不再繼續(xù)運(yùn)行胧奔。 | |
2 | E_WARNING | 運(yùn)行時警告 (非致命錯誤)。僅給出提示信息老充,但是腳本不會終止運(yùn)行葡盗。 |
4 | 編譯時語法解析錯誤。解析錯誤僅僅由分析器產(chǎn)生啡浊。導(dǎo)致腳本終止不再繼續(xù)運(yùn)行 | |
8 | E_NOTICE | 運(yùn)行時通知觅够。表示腳本遇到可能會表現(xiàn)為錯誤的情況,但是在可以正常運(yùn)行的腳本里面也可能會有類似的通知巷嚣。 |
16 | 在PHP初始化啟動過程中發(fā)生的致命錯誤喘先。該錯誤類似 E_ERROR,但是是由PHP引擎核心產(chǎn)生的廷粒。導(dǎo)致腳本終止不再繼續(xù)運(yùn)行 | |
32 | PHP初始化啟動過程中發(fā)生的警告 (非致命錯誤) 窘拯。類似 E_WARNING,但是是由PHP引擎核心產(chǎn)生的坝茎。 | |
64 | 致命編譯時錯誤涤姊。類似E_ERROR, 但是是由Zend腳本引擎產(chǎn)生的。導(dǎo)致腳本終止不再繼續(xù)運(yùn)行 | |
128 | 編譯時警告 (非致命錯誤)嗤放。類似 E_WARNING思喊,但是是由Zend腳本引擎產(chǎn)生的。 | |
256 | E_USER_ERROR | 用戶產(chǎn)生的錯誤信息次酌。類似 E_ERROR, 但是是由用戶自己在代碼中使用PHP函數(shù) trigger_error()來產(chǎn)生的恨课。導(dǎo)致腳本終止不再繼續(xù)運(yùn)行 |
512 | E_USER_WARNING | 用戶產(chǎn)生的警告信息。類似 E_WARNING, 但是是由用戶自己在代碼中使用PHP函數(shù) trigger_error()來產(chǎn)生的岳服。 |
1024 | E_USER_NOTICE | 用戶產(chǎn)生的通知信息剂公。類似 E_NOTICE, 但是是由用戶自己在代碼中使用PHP函數(shù) trigger_error()來產(chǎn)生的。 |
2048 | 啟用 PHP 對代碼的修改建議吊宋,以確保代碼具有最佳的互操作性和向前兼容性纲辽。 | |
4096 | E_RECOVERABLE_ERROR ,將成為一個 E_ERROR 從而腳本會終止運(yùn)行璃搜。 | |
8192 | E_DEPRECATED | 運(yùn)行時通知文兑。啟用后將會對在未來版本中可能無法正常工作的代碼給出警告。 |
16384 | E_USER_DEPRECATED | 用戶產(chǎn)少的警告信息腺劣。 類似 E_DEPRECATED, 但是是由用戶自己在代碼中使用PHP函數(shù) trigger_error()來產(chǎn)生的绿贞。 |
30719 | E_ALL | E_STRICT除外的所有錯誤和警告信息。 |