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