PHP之 錯誤 與 異常處理
阿新 • • 發佈:2017-07-13
函數 用戶 exceptio 產生 存放位置 如果 date error_log reporting
PHP的錯誤報告有三種:
1.錯誤,語法解析錯誤,致命錯誤
2.警告
3.註意
錯誤 -> 致命錯誤,會終止已下程序的執行,語法錯誤的話,PHP壓根就沒執行
警告 -> 他不會終止運行,但會影響結果
註意 -> 不會終止執行,也不會影響結果
為了讓用戶得到更好的體驗,我們屏蔽所有錯誤的輸出,是輸出,而不是顯示
但這樣的話,管理員也看不到錯誤了。
頁面上不顯示錯誤,而將錯誤生成一個日誌,提供給管理員查看。
error_reporting(~E_ALL)將所有輸出都屏蔽掉了,自然,管理員也看不到了
我不要屏蔽所有輸出,我只要屏蔽所有顯示
ini_set(‘display_errors‘,‘off‘);表示屏蔽了所有的頁面上錯誤的顯示,但沒有屏蔽錯誤的輸出
ini_set(‘log_errors‘,‘on‘); //開啟日誌寫入功能 ini_set(‘error_log‘,‘myerror.log‘); //日誌的存放位置 ini_set(‘display_errors‘,‘off‘); //屏蔽頁面顯示 error_reporting(E_ALL); //輸出所有錯誤
echo 123; echo $str; //這個會出現一個註意,表示未聲明變量 echo date(); //警告,沒有傳參 echo dae(); //致命錯誤,找不到這個函數 echo 123;
異常:
在 PHP語言裏,所有異常都必須自己拋出,而不像 JAVA 之類的語言會自動
拋出異常,這也正是 PHP源代碼裏很少看到異常處理語句的原因之一。
<?php // 如果PHP內置了處理被除數不能為零的異常類,那麽是不需要手動拋出的 $a = 5; $b = 0; try { echo $a / $b; } catch (Exception $e) { echo ‘發現異常了‘; } // 這種情況下,是不會執行捕獲語句的,頁面上依舊顯示報錯信息:Warning: Division by zero
<?php //PHP無法自動拋出異常,所以需要我們手動拋出 $a = 5; $b = 0; try { if ($b== 0) throw new Exception(‘被除數為零‘); echo $a / $b; } catch (Exception $e) { echo ‘產生異常:‘.$e->getMessage(); }
頁面輸出: 產生異常:被除數為零
PHP之 錯誤 與 異常處理