摘要:常見錯誤處理類型語法錯誤環境錯誤邏輯錯誤常見錯誤級別最低級別的錯誤不推薦,不建議,使用一些過期函數的時候會出現,程序繼續執行通知級別的錯誤使用一些未定義變量常量或者數組沒有加引號的時候會出現,程序繼續執行警告級別的錯誤程序出問題了,需要修改
常見錯誤處理類型
語法錯誤
環境錯誤
邏輯錯誤
常見錯誤級別
Deprecated 最低級別的錯誤
不推薦,不建議,使用一些過期函數的時候會出現,程序繼續執行
Notice 通知級別的錯誤
使用一些未定義變量、常量或者數組key沒有加引號的時候會出現,程序繼續執行
Waning 警告級別的錯誤
程序出問題了,需要修改代碼!!!程序繼續執行
Fatal Error 錯誤級別的錯誤
程序直接報錯,需要修改代碼!!!中斷程序執行
parse error 語法解析錯誤
語法檢查階段報錯,需要修改代碼!!!中斷程序執行
E_USER_相關的錯誤
用戶定義的錯誤,用戶手動拋出錯誤,進行自定義錯誤處理
PHP配置文件和錯誤相關選項設置錯誤級別
1、通過修改php.ini文件設置錯誤級別,靜態設置,需要重啟apache
// error_reporting = E_ALL&~E_NOTICE; //顯示所有錯誤,除了E_NOTICE級別
// display_errors = 1; //線下開啟,先上關閉
2、通過error_reporting()函數設置,動態設置
// error_reporting(E_ALL&~E_NOTICE); //顯示所有錯誤,除了E_NOTICE級別
// error_reporting(0); //屏蔽所有錯誤,只會顯示語法解析錯誤
// erorr_reporting(-1); //顯示所有錯誤
3、通過ini_set()函數進行運行時設置,動態設置
// ini_set("error_reporting",0);
// ini_set("error_reporting",-1);
// ini_set("display_errors",0);
代碼繼續執行";記錄錯誤
配置php.ini腳本設置記錄錯誤
log_errors = On //是否將產生錯誤信息記錄到日志或者error_log中
;error_log = syslog //設置腳本錯誤將記錄到系統日志中
log_errors_max_len = 1024 //設置錯誤報錯最大值,單位字節
ignore_repeated_errors = Off //是否忽略重復的錯誤信息
ignore_repeated_source = Off //是否忽略重復錯誤消息的來源
track_errors = On //如果開啟,最后一個錯誤將永遠保存在$php_errormsg中
將錯誤記錄到指定的文件中
"; settype($var,"king"); //Warning echo "
"; test(); //Fatal error
將日志文件保存到系統日志中
錯誤抑制符將錯誤以郵件形式發送
1、首先需要配置郵件服務器!
2、去php.ini中配置郵件參數
3、寫代碼error_log("當前系統被人攻擊!產生錯誤!",1,"87399497@qq.com");error_log函數使用error_log($msg); //傳入錯誤記錄,需要與error_log配置使用如何使用Set_error_handler()錯誤代碼:[{$errno}] {$errmsg}自定義一個錯誤處理器
".PHP_EOL; echo "錯誤行號:{$file}文件中的第 {$line}
".PHP_EOL; echo "PHP版本:".PHP_VERSION."(".PHP_OS.")
".PHP_EOL; //注意:如果自定義錯誤處理捕獲了,代碼還是會執行,如果不想被執行,需要die掉!!! //die; } //設置自定義錯誤處理 set_error_handler("customer_error"); //輸出一個未定義變量的警告 echo $test; echo "
"; //原生出錯 //Notice: Undefined variable: test in D:phpStudyWWWexampleindex.php on line 26 //自定義出錯 //錯誤代碼:[8] Undefined variable: test //錯誤行號:D:phpStudyWWWexampleindex.php文件中的第 26 //PHP版本:5.3.29(WINNT) //無法捕獲一個致命錯誤Fatal error,會切換到原生出錯 //test(); //手動拋出一個錯誤,被自定義的錯誤處理捕獲 trigger_error("this is a test of error",E_USER_ERROR); echo "contiune"; echo "
"; //錯誤代碼:[256] this is a test of error //錯誤行號:D:phpStudyWWWexampleindex.php文件中的第 43 //PHP版本:5.3.29(WINNT) //contiune //取消自定義錯誤處理,將會重新適應PHP原生的錯誤處理 restore_error_handler(); echo $tt; echo "
"; //Notice: Undefined variable: tt in D:phpStudyWWWexampleindex.php on line 49 //重新掛載自定義錯誤處理 //除了NOTICE級別的交給系統處理,剩下的全部使用customer_error自定義的錯誤處理 set_error_handler("customer_error",E_ALL&~E_NOTICE); echo $asc; //E_NOTICE級別,系統的錯誤處理 settype($var,"king"); //E_WARNING級別,使用自定義的錯誤處理 //Notice: Undefined variable: asc in D:phpStudyWWWexampleindex.php on line 65 //錯誤代碼:[2] settype() [function.settype]: Invalid type //錯誤行號:D:phpStudyWWWexampleindex.php文件中的第 66 //PHP版本:5.3.29(WINNT)msg = $msg; $this->filename = $filename; $this->line = $line; $this->vars = $vars; } public static function deal($errno,$errmsg,$filename,$line,$vars){ $self = new self($errmsg,$filename,$line,$vars); switch ($errno) { case E_USER_ERROR : return $self->dealError(); break; case E_USER_WARNING : case E_WARNING : return $self->dealWarning(); break; case E_NOTICE : case E_USER_NOTICE : return $self->dealNotice(); break; default: return false; break; } } /** * 處理致命錯誤 * @return [type] [description] */ public function dealError(){ ob_start(); debug_print_backtrace(); $backtrace = ob_get_flush(); $errmsg = <<register_shutdown_function()函數filename} 產生錯誤的信息:{$this->msg} 產生錯誤的行號:{$this->line} 追蹤信息:{$backtrace} EOF; //發送郵件的錯誤日志 //error_log($errmsg,1,"87399497@qq.com"); //記錄到錯誤日志 error_log($errmsg,3,"D:/logs/customer_error.log"); exit(1); } /** * 處理警告錯誤 * @return [type] [description] */ public function dealWarning(){ $errmsg = << filename} 產生警告的信息:{$this->msg} 產生警告的行號:{$this->line} EOF; error_log($errmsg,3,"D:/logs/customer_warning.log"); } /** * 處理通知級別的錯誤 * @return [type] [description] */ public function dealNotice(){ $date = date("Y-m-d H:i:s",time()); $errmsg = << filename} 產生錯誤的信息:{$this->msg} 產生錯誤的行號:{$this->line} 產生通知的時間:{$date} EOF; error_log($errmsg,3,"D:/logs/customer_notice.log"); } } //顯示所有錯誤 error_reporting(-1); //設置自定義錯誤,使用傳入類和方法的方式 set_error_handler(array("MyErrorHandler","deal")); //觸發NOTICE級別錯誤,會保存到log日志中 echo $tt; //手動觸發一個錯誤 trigger_error("手動拋出一個錯誤",E_USER_ERROR); "; error_get_last(); echo ""; //因為register_shutdown_function調用該函數的時候,是代碼終止,脫離當前PHP上下文環境了 //所以$filename的路徑要寫決定路徑!!! file_put_contents("D:logs egister_shutdown_function.log", error_get_last()); die("endScript"); } } } //特別聲明!如果有die或exit在注冊錯誤處理之前,那么將不會注冊錯誤處理 register_shutdown_function(array("Showdown","endScript")); echo md6();
@settype($var,"longjq"); //無變量$var,使用@符號進行抑制錯誤輸出錯誤級別
http://www.w3school.com.cn/php/php_ref_error.asp
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21189.html
摘要:異常與錯誤異常是指程序運行中不符合預期情況以及與正常流程不同的狀況。在中主要的錯誤等級如下最低級別的錯誤,表示不推薦不建議。小結中錯誤和異常是兩個不同的概念,這種設計根本上導致了的異常和錯誤與其它語言相異。中,異常時錯誤唯一的報告方式。 異常與錯誤 異常是指程序運行中不符合預期情況以及與正常流程不同的狀況。錯誤則屬于自身問題,是一種非法語法或者環境問題導致的、讓編譯器無法通過檢查設置無...
摘要:是所有異常的基類。它包含的異常的確是對象,唯一條件就是必須從類繼承。在語句中使用所謂的是一關系對類的名字和異常對象做檢查。如果異常在任何地方都沒能捕獲,那么會提供最后的機會異常處理函數。 Exception是所有異常的基類。 Exception { /* 屬性 */ protected string $message ; protected int $code ...
摘要:上手并過渡到取代的泊學原文鏈接泊學代碼秀視頻自從以來,的錯誤處理幾乎就是一成不變的。在中,這個尷尬的現狀,終于被徹底改變了。無論是還是傳統的,只要類型不匹配約束的時候,就會導致異常。 上手并過渡到PHP7 取代fatal error的engine exceptions 泊學原文鏈接泊學代碼秀視頻 自從PHP 4以來,PHP的錯誤處理幾乎就是一成不變的。只不過在PHP 5.0里添加了E_...
摘要:一的幾個函數異常捕獲自定義處理函數注冊錯誤捕獲自定義處理函數注冊程序執行時異常終止錯誤捕獲處理函數注冊這三個函數在錯誤處理控制中給開發者提供了很大的自主空間,在日志系統中記錄日志信息有他們的功勞。下面要說的類庫是借鑒了日志系統的設計。 引言 接觸過php框架的朋友們可能都知道,日志在項目中的重要作用了,他可以幫助我們定位錯誤的位置,讓程序更友好(處理得當的話不會直接拋出一大堆只有程...
閱讀 638·2021-11-25 09:43
閱讀 1906·2021-11-17 09:33
閱讀 824·2021-09-07 09:58
閱讀 2062·2021-08-16 10:52
閱讀 482·2019-08-30 15:52
閱讀 1722·2019-08-30 15:43
閱讀 974·2019-08-30 15:43
閱讀 2924·2019-08-29 16:41