程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php異常錯誤處理機制與錯誤處理(1/2)

php異常錯誤處理機制與錯誤處理(1/2)

編輯:關於PHP編程

在php中我們用到最常用的錯誤機制有try catch{}這個來處理可以很方便面的捕捉到錯誤,但在php中對於很多還提供了錯誤查看和錯誤關閉這個可以在php.ini中處理也可以在文件最開始加個error_display(0);來不顯示錯誤  代碼如下 復制代碼

<?php
$a = fopen('test.txt','r');
//這裡並沒有對文件進行判斷就打開了,如果文件不存在就會報錯
?>

那麼正確的寫法應該如下:

 代碼如下 復制代碼

<?php
if(file_exists('test.txt')){
$f=fopen('test.txt','r');
//使用完後關閉
fclose($f);
}
?>

一、PHP錯誤處理的三種方式A、簡單的die()語句;
等價於exit();
例:

 代碼如下 復制代碼

if(!file_exists('aa.txt')){
die('文件不存在');
} else {
//執行操作
}
//如果上面die()被觸發,那麼這裡echo接不被執行
echo 'ok';

簡潔寫法:

 代碼如下 復制代碼

file_exits('aaa.txt') or die('文件不存在');
echo 'ok';

B、自定義錯誤和錯誤觸發器

1、錯誤處理器(自定義錯誤,一般用於語法錯誤處理)
創建自定義錯誤函數(處理器),該函數必須有能力處理至少兩個參數(error_level和errormessage),但是可以接受最多五個參數(error_file、error_line、error_context)
語法:

function error_function($error_level,$error_message,$error_file,$error_line,$error_context)
//創建好後還需要改寫set_error_handler();函數
set_error_handler('error_function',E_WARNING);//這裡error_function對應上面創建的自定義處理器名,第二個參數為使用自定義錯誤處理器的錯誤級別;

錯誤報告級別(了解即可)

這些錯誤報告級別是錯誤處理程序旨在處理的錯誤的不同的類型:

值 常量 描述
2 E_WARNING 非致命的 run-time 錯誤。不暫停腳本執行。
8 E_NOTICE Run-time 通知。

腳本發現可能有錯誤發生,但也可能在腳本正常運行時發生。
 
256 E_USER_ERROR 致命的用戶生成的錯誤。這類似於程序員使用 PHP 函數 trigger_error() 設置的 E_ERROR。
512 E_USER_WARNING 非致命的用戶生成的警告。這類似於程序員使用 PHP 函數 trigger_error() 設置的 E_WARNING。
1024 E_USER_NOTICE 用戶生成的通知。這類似於程序員使用 PHP 函數 trigger_error() 設置的 E_NOTICE。
4096 E_RECOVERABLE_ERROR 可捕獲的致命錯誤。類似 E_ERROR,但可被用戶定義的處理程序捕獲。(參見 set_error_handler())
8191 E_ALL 所有錯誤和警告,除級別 E_STRICT 以外。

(在 PHP 6.0,E_STRICT 是 E_ALL 的一部分)
 

2、錯誤觸發器(一般用於處理邏輯上的錯誤)
需求:比如要接收一個年齡,如果數字大於120,就認為是一個錯誤
傳統方法:

if($age>120){
echo '年齡錯誤';exit();
}

使用觸發器:

if($age>120){
//trigger_error('錯誤信息'[,'錯誤等級']);這裡錯誤等級為可選項,用於定義該錯誤的級別
//用戶定義的級別包含以下三種:E_USER_WARNING 、E_USER_ERROR 、E_USER_NOTICE
trigger_error('年齡錯誤');//這裡是調用的系統默認的錯誤處理方式,我們也可以用自定義處理器
}
//自定義處理器,與上面相同
function myerror($error_level,$error_message){
echo 'error text';
}
//同時需要改變系統默認的處理函數
set_error_handler('myerror',E_USER_WARNING);//同上面,第一個參數為自定義函數的名稱,第二個為錯誤級別【這裡的錯誤級別通常為以下三種:E_USER_WARNING 、E_USER_ERROR 、E_USER_NOTICE】
//現在再使用trigger_error就可以使用自定義的錯誤處理函數了

練習題:

 代碼如下 復制代碼

<?php
date_default_timezone_set('PRC');
function myerror($error_level,$error_message){
$info= "錯誤號:$error_leveln";
$info.= "錯誤信息:$error_messagen";
$info.= '發生時間:'.date('Y-m-d H:i:s');
$filename='aa.txt';
if(!$fp=fopen($filename,'a')){
'創建文件'.$filename.'失敗';
}
if(is_writeable($filename)){
if(!fwrite($fp,$info)){
echo '寫入文件失敗';
} else {
echo '已成功記錄錯誤信息';
}
fclose($fp);
} else {
echo '文件'.$filename.'不可寫';
}
exit();
}
set_error_handler('myerror',E_WARNING);
$fp=fopen('aaa.txt','r');
?>

1 2

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