PHP錯誤處理

來源:互聯網
上載者:User

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

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

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.