本篇將會說明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中文網其他相關文章!