在php中我們會經常碰到一些錯誤要去處理,下面我來總結php中的異常處理、錯誤報告、日志一些內容總結與介紹。
錯誤處理:
1.語法錯誤
2.運行時錯誤
3.邏輯錯誤
錯誤報告:
錯誤:E_ERROT 程序會中斷,發生錯誤
警告:E_WARNING 程序不會中斷,但可能部分功能沒有實現
注意:E_NOTICE 不會影響程序,完全可以屏蔽
開發時輸出所有錯誤報告,運行時禁用所有錯誤報告
將錯誤寫入到日志中:
1.開啟日志(php.ini中error_log = On),且關閉錯誤報告,錯誤(如果發生,但沒有允許直接輸出)日志將會被記錄
2.如不指定日志路徑,將默認寫入web服務器日志中
設置錯誤報告:
error_reporting(E_ALL) //輸出所有報告
修改php.ini配置文件:
代碼如下 復制代碼ini_set(“display_errors”,off) //修改為不顯示錯誤報告
ini_get(“upload_max_filesize”) //讀取配置文件中上傳文件大小限制
異常處理:
意外,是在程序運行中發生的意料之外的事,使用異常改變腳本正常流程
PHP 5 提供了一種新的面向對象的錯誤處理方法。
異常處理用於在指定的錯誤(異常)情況發生時改變腳本的正常流程。這種情況稱為異常。
當異常被觸發時,通常會發生:
•當前代碼狀態被保存
•代碼執行被切換到預定義的異常處理器函數
•根據情況,處理器也許會從保存的代碼狀態重新開始執行代碼,終止腳本執行,或從代碼中另外的位置繼續執行腳本
我們將展示不同的錯誤處理方法:
•異常的基本使用
•創建自定義的異常處理器
•多個異常
•重新拋出異常
•設置頂層異常處理器
語法:
代碼如下 復制代碼try{
可能出錯的代碼
throw new Exception(“異常信息”)
}catch(Exception $e[異常對象]){
後面的正常代碼
}
例
function runtimeErrorHandler($level,$string)
{
//自定義錯誤處理時,手動拋出一個異常實例
//為了把錯誤級別代碼也顯示出來,這裡拼接了錯誤代碼和錯誤信息作為新的錯誤信息來傳遞。
throw new Exception($level.'|'.$string);
}
//設置自定義錯誤處理函數
set_error_handler( "runtimeErrorHandler");
try
{
$a=2/0;
//這裡制造一個以前無法截獲的除0錯誤
}
catch(Exception $e)
{
echo '錯誤信息:', $e->getMessage();
//顯示錯誤,這裡就可以看到錯誤級別和錯誤信息了“2|Division by zero”
}
1.如果try中代碼沒有異常,則正常執行。
2.如果try中代碼有異常,則拋出一個異常對象,在catch()中捕捉$e就指向異常對象。再繼續向下執行
3.$e->getMessage()獲取異常信息
自定義異常類:
作用:寫一些方法解決特定異常(內置的類沒有處理方法)
1.自定義異常類,必須是Exception(內置類)的子類
2.Exception類中只有構造方法和toString()可以重寫
3.定義需要的方法
異常的規則
•需要進行異常處理的代碼應該放入 try 代碼塊內,以便捕獲潛在的異常。
•每個 try 或 throw 代碼塊必須至少擁有一個對應的 catch 代碼塊。
•使用多個 catch 代碼塊可以捕獲不同種類的異常。
•可以在 try 代碼塊內的 catch 代碼塊中再次拋出(re-thrown)異常。