由於教程是圍繞著文件打開做的錯誤處理,所以先記錄幾個用於文件處理的一些函數,fopen 用於打開一個文件;file_exists 用於檢查目錄是否存在;fclose( $變數 )用於指定關閉打開的文件; PHP處理錯誤的幾種方式:die()語句;自定義錯誤和錯誤觸發器;錯誤日誌; die()語句: ...
由於教程是圍繞著文件打開做的錯誤處理,所以先記錄幾個用於文件處理的一些函數,fopen 用於打開一個文件;file_exists 用於檢查目錄是否存在;fclose( $變數 )用於指定關閉打開的文件;
PHP處理錯誤的幾種方式:die()語句;自定義錯誤和錯誤觸發器;錯誤日誌;
die()語句:
eg :file_exists ( “文件路徑/文件名” ) or die( "文件不存在" );
自定義錯誤處理器(函數)
基本語法:首先定義一個錯誤函數,然後改寫set_error_handler處理器;
error_function( error_level , error_massage, error_file , error_line , error_context);
//這裡的error_level , error_massage 是必要的,後面的三個參數是可選的;
set_error_handler( “ 錯誤函數名 ” , 錯誤等級);
// eg:fuction my_error( $errno , $errmes ){ //定義錯誤函數
echo $errno . “錯誤信息是:” . $errmes ;
}
set_error_handler( "my_error" , E_USER_WARNING );
//這裡改寫了user_warning的錯誤處理器,如需要定義其他級別錯誤需要分別定義錯誤等級;一般自定義錯誤處理器都是定義user級別的錯誤;
$age=200;
if( $age > 120 ){
//調用錯誤處理器;
trigger_error( " 輸入年齡過大 " , E_USER_WARNING); //trigger_error函數預設是NOTICE級別,如有需要必須自定義錯誤級別;
}
PHP錯誤日誌保存
基本語法:error_log( 錯誤信息 ,destination_type , " 錯誤日誌保存位置及文件名 " );
// eg:fuction my_error( $errno , $errmes ){ //定義錯誤函數
$error_info = $errno . “錯誤信息是:” . $errmes ;
date_default_timezone_set( “ Asia/ChongQing ” ); //這裡定義一個時區,後面的錯誤信息插入時間方便日後閱讀錯誤日誌;
error_log( " 時間是 " . date( " Y - m - d G - i - s " ) $error_info ." \r\n " , 3 , "XXX.txt" ); // \r\n是txt文件里的換行符,destination_type 這裡大多數情況下使用3追加記錄日誌模式;
}
PHP中的異常處理
基本語法:
try{
可能出現的錯誤的代碼;
}catch( Excepion $e ){
1.自己處理;2.自己不處理,拋出;
}
throw new Excepion( “異常信息提示” ); // throw用於拋出異常;
當捕獲到一個異常以後,try()塊里的代碼將不再繼續執行;
catch( Excepion $e ){
//這裡可以使用函數調用錯誤信息,行號,異常代碼等等,詳細參數如下圖所示;
echo $e -> getMessage() ;
}
當異常繼續被拋出,而又沒有catch接受異常,PHP會調用預設的頂級異常處理器,頂級異常處理器也可以自定義;
function my_exception( $e ){ //自定義頂級異常處理器函數
echo 錯誤信息 . $e -> getMessage(); //也可以使用上圖其他函數;
}
set_exception_handler( " 頂級異常處理器函數名 " ) ; //修改預設頂級處理器(函數)