程式如果沒有錯誤處理機制會怎樣?有時可能會出現問題。
例:比較健壯的程式寫法:
<?php
if(!file_exists("aa.txt")){
echo "檔案不存在";
exit();
}else{
$fp=fopen("aa.txt","r");
echo "檔案開啟成功";
fclose($fp);
}
?>
php處理錯誤的方式
1、簡單的“die()”語句。
die()功能相當於exit()
<?php
/*if(!file_exists("aa.txt")){
die("檔案不存在");
}else{
$fp=fopen("aa.txt","r");
echo "檔案開啟成功";
fclose($fp);
}*/
//下面的代碼與上面多行注釋中的代碼功能相同,不過更加簡潔
file_exists("aa.txt") or die("檔案不存在"); //如果函數為真,程式繼續執行,否則執行die()
$fp=fopen("aa.txt","r");
echo "檔案開啟成功";
fclose($fp);
?>
2、自訂錯誤(錯誤處理器)和錯誤觸發器
該函數必須有能力處理至少兩個參數(error level和error message),但是可以接受最多五個參數(可選的:file,line-number以及error context):
基本文法:
error_function(error_level,error_message,error_file,error_line,error_context);
php的錯誤層級
例:
<?php
//自訂錯誤處理函數
function my_error($errno,$errmes){
echo "<font size='5' color='red'>$errno</font><br />";
echo "錯誤資訊是:$errmes";
exit();
}
//改定set_error_handler處理器
set_error_handler("my_error",E_WARNING); //指定WARNING層級的錯誤調用自訂的錯誤函數
$fp=fopen("bb.txt","r");
?>
php的錯誤觸發器:用於處理邏輯錯誤
例:有一段代碼,接收一個年齡,如果輸入的年齡>=120,認為是一個錯誤。
//傳統方法
if($age>=120){
echo "年齡太大";
exit();
}
<?php
//自訂錯誤處理器
function my_error3($errno,$errmes){
echo "錯誤號碼是:".$errno;
}
//指定E_WARNING層級的錯誤處理函數
set_error_handler("my_error3",E_USER_WARNING);
$age=300;
if($age>120){
//調用觸發器,同時指定錯誤層級
trigger_error("輸入的年齡過大",E_USER_WARNING);
//exit();
}
echo "OK";
?>
例:自訂一個錯誤處理函數,要求當開啟一個檔案不存在時,自動調用該函數,並記錄錯誤資訊,要求記錄錯誤號碼,錯誤資訊和發生時間。
3、php錯誤記錄檔
預設根據php.ini中的error_log配置,通過使用error_log()函數,可以向指定的檔案或遠程目的地發送錯誤記錄。
文法:
bool error_log(string $message [,int $message_type=0[,string $destination[,string $extra_headers]]])
例:
<?php
//自訂錯誤處理器
function my_error3($errno,$errmes){
$err_info="錯誤號碼是:".$errno."--".$errmes;
//把錯誤資訊儲存
//表示向檔案輸出一個斷行符號換行
error_log($err_info."\r\n",3,"myerr.txt");
}
//指定E_WARNING層級的錯誤處理函數
set_error_handler("my_error3",E_USER_WARNING);
$age=300;
if($age>120){
//調用觸發器,同時指定錯誤層級
trigger_error("輸入的年齡過大",E_USER_WARNING);
//exit();
}
echo "OK";
?>
現在要把時間也儲存下來:
php設定時區
<?php
echo time()."<br />";
//輸出當前日期和時間
//預設是UTC,和中國相差8小時,設定時區方法:
//1、版面設定 2、在php.ini設定
date_default_timezone_set("PRC");//設定為 中國時區
echo "<br />";
echo date("Y-m-d G-i-s")
?>
改定上例,讓日誌中也能記錄時間
<?php
//自訂錯誤處理器
function my_error3($errno,$errmes){
$err_info="錯誤號碼是:".$errno."--".$errmes;
//把錯誤資訊儲存
//表示向檔案輸出一個斷行符號換行
date_default_timezone_set("PRC");//設定為 中國時區
error_log("時間是".date("Y-m-d G-i-s").$err_info."\r\n",3,"myerr.txt");
}
//指定E_WARNING層級的錯誤處理函數
set_error_handler("my_error3",E_USER_WARNING);
$age=300;
if($age>120){
//調用觸發器,同時指定錯誤層級
trigger_error("輸入的年齡過大",E_USER_WARNING);
//exit();
}
echo "OK";
?>
URL: http://www.bianceng.cn/webkf/PHP/201701/50504.htm