程序如果沒有錯誤處理機制會怎樣?有時可能會出現問題。
例:比較健壯的程序寫法:
<?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