程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP錯誤處理

PHP錯誤處理

編輯:PHP綜合

程序如果沒有錯誤處理機制會怎樣?有時可能會出現問題。

例:比較健壯的程序寫法:

<?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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved