首頁 >後端開發 >php教程 >php的錯誤處理及實作方法

php的錯誤處理及實作方法

jacklove
jacklove原創
2018-05-22 14:16:411467瀏覽

本篇將會說明php錯誤處理的實作方法。

php的錯誤,警告,異常處理如何實現,那些函數用於處理對應的錯誤

php 異常提示分為三類error/warning/notice

錯誤補充:

Fatal Error:致命錯誤(腳本終止運行)

E_ERROR // 致命的運行錯誤,錯誤無法恢復,暫停執行腳本

E_CORE_ERROR // PHP啟動時初始化過程中的致命錯誤

E_COMPILE_ERROR // 編譯時致命性錯,就像由Zend腳本引擎產生了一個E_ERROR

E_USER_ERROR // 自訂錯誤訊息。像是用PHP函數trigger_error(錯誤類型設定為:E_USER_ERROR)

#E_RECOVERABLE_ERROR //可被捕捉的致命錯誤。它表示發生了一個可能非常危險的錯誤,但還沒有導致PHP引擎處於不穩定的狀態。

Parse Error:編譯時解析錯誤,語法錯誤(腳本終止運行)

E_PARSE //編譯時的語法解析錯誤

警告補充:警告錯誤(僅給出提示訊息,腳本不終止執行)

E_WARNING // 執行階段警告(非致命錯誤)。

E_CORE_WARNING // PHP初始化啟動過程中發生的警告 (非致命錯誤) 。

E_COMPILE_WARNING // 編譯警告

E_USER_WARNING // 使用者產生的警告訊息

異常通知補充:通知錯誤(僅給予通知訊息,腳本不終止執行)

E_NOTICE // 執行時間通知。表示腳本遇到可能會表現為錯誤的情況.

E_USER_NOTICE // 使用者產生的通知訊息。

php錯誤處理實作:

register_shutdown_function('funcName') // 參數是需要捕獲錯誤的函數名稱,但是register_shutdown_function,只能捕捉執行時候的致命錯誤,不能捕獲解釋時的執行錯誤,因為它時程式執行完成之後執行的函數(例如語法錯誤,這種運行時就會產生的錯誤時不會被捕捉的)

set_error_handler('funcName') //參數是需要捕獲的回呼的函數名,區別於register_shutdown_function,它是在函數運行期間捕獲到錯誤

當目標文件執行遇到錯誤的時候,系統會回調指定函數:

範例:

register_shutdown_function( "fatal_handler" );
set_error_handler("error_handler");
define('E_FATAL', E_ERROR | E_USER_ERROR | E_CORE_ERROR |
E_COMPILE_ERROR | E_RECOVERABLE_ERROR| E_PARSE );
//获取fatal error
function fatal_handler() {
$error = error_get_last();
if($error && ($error["type"]===($error["type"] & E_FATAL))) {
$errno = $error["type"]; //
$errfile = $error["file"];
$errline = $error["line"];
$errstr = $error["message"];
error_handler($errno,$errstr,$errfile,$errline);
}
}

//取得所有的error

function error_handler($errno,$errstr,$errfile,$errline){
$str=<< "errno":$errno
"errstr":$errstr
"errfile":$errfile
"errline":$errline
EOF;
//获取到错误可以自己处理,比如记Log、报警等等
echo $str;
}
//error_get_last() 捕获到的执行错误结果
//error_clear_last() 清除最后一次产生的错误信息

//上面兩者可以捕獲所有錯誤,警告, 異常,但作性能考慮,不建議使用其捕獲警告異常

本篇介紹了錯誤處理的方法,更多相關內容請關注php中文網。

相關推薦:

PHP在陣列第幾列取得多維數組指定的值?

php基礎學習:PHP陣列與資料結構

#php基礎學習:PHP檔案系統

以上是php的錯誤處理及實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn