PHP錯(cuò)誤和異常處理功能模塊示例
本文實(shí)例講述了PHP錯(cuò)誤和異常處理功能模塊。分享給大家供大家參考,具體如下:
一、錯(cuò)誤類型和基本的調(diào)試方法
PHP程序的錯(cuò)誤發(fā)生一般歸屬于下列三個(gè)領(lǐng)域:
語(yǔ)法錯(cuò)誤:
語(yǔ)法錯(cuò)誤最常見(jiàn),并且也容易修復(fù)。如:代碼中遺漏一個(gè)分號(hào)。這類錯(cuò)誤會(huì)阻止腳本的執(zhí)行。
運(yùn)行時(shí)錯(cuò)誤:
這種錯(cuò)誤一般不會(huì)阻止PHP腳本的執(zhí)行,但會(huì)阻止當(dāng)前要做的事情。輸出一條錯(cuò)誤,但php腳本繼續(xù)執(zhí)行
邏輯錯(cuò)誤:
這種錯(cuò)誤最麻煩,既不阻止腳本執(zhí)行,也不輸出錯(cuò)誤消息。
一個(gè)異常則是在一個(gè)程序執(zhí)行過(guò)程中出現(xiàn)的一個(gè)例外,或是一個(gè)事件,它中斷了正常指令的運(yùn)行,跳轉(zhuǎn)到其他程序模塊繼續(xù)執(zhí)行。
PHP的錯(cuò)誤報(bào)告級(jí)別
E_ALL //所有信息值:6143
E_ERROR//致命的運(yùn)行時(shí)錯(cuò)誤值:1
E_RECOVERABLE_ERROR //接近致命的運(yùn)行時(shí)錯(cuò)誤,若未被捕獲則視同E_ERROR 值:4096
E_WARNING //運(yùn)行時(shí)警告(非致命性錯(cuò)誤) 值:2
E_PARSE//編譯時(shí)解析錯(cuò)誤值:4
E_NOTICE //運(yùn)行時(shí)提醒(經(jīng)常是bug,也可能是有意的) 值:8
E_STRICT//編碼標(biāo)準(zhǔn)化警告(建議如何修改以向前兼容) 值:2048
E_CORE_ERROR //PHP啟動(dòng)時(shí)初始化過(guò)程中的致命錯(cuò)誤值:16
E_CORE_WARNING //PHP啟動(dòng)時(shí)初始化過(guò)程中的警告(非致命性錯(cuò))值:32
E_COMPILE_ERROR //編譯時(shí)致命性錯(cuò)值:64
E_COMPILE_WARNING //編譯時(shí)警告(非致命性錯(cuò)) 值:128
E_USER_ERROR //用戶自定義的致命錯(cuò)誤值:256
E_USER_WARNING //用戶自定義的警告(非致命性錯(cuò)誤) 值:512
E_USER_NOTICE //用戶自定義的提醒(經(jīng)常是bug) 值:1024
php.ini配置文件
display_errors: 是否開(kāi)啟PHP輸出錯(cuò)誤報(bào)告的功能
值為:On(默認(rèn)輸出錯(cuò)誤報(bào)告)、Off(屏蔽所有錯(cuò)誤信息)
在PHP腳本中可調(diào)用ini_set( )函數(shù),動(dòng)態(tài)設(shè)置php.ini配置文件.
如:ini_set("display_errors","On"); //顯示所有錯(cuò)誤信息
error_reporting: 設(shè)置不同的錯(cuò)誤報(bào)告級(jí)別。
error_reporting= E_ALL & ~E_NOTICE
--可以拋出任何非注意的錯(cuò)誤,默認(rèn)值
error_reporting= E_ERROR | E_PARSE | E_CORE_ERROR
--只考慮致命的運(yùn)行時(shí)錯(cuò)誤、新解析錯(cuò)誤和核心錯(cuò)誤。
error_reporting= E_ALL & ~(E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE)
--報(bào)告除用戶導(dǎo)致的錯(cuò)誤之外的所有錯(cuò)誤。
在PHP腳本可以通過(guò)error_reporting( )函數(shù)動(dòng)態(tài)設(shè)置錯(cuò)誤報(bào)告級(jí)別。如:error_reporting(E_ALL);]
設(shè)置錯(cuò)誤級(jí)別實(shí)例:error.php
<h2>測(cè)試錯(cuò)誤報(bào)告</h2>
<?php
/*開(kāi)啟php.ini中的display_errors指令,只有該指令開(kāi)啟如有錯(cuò)誤報(bào)告才能輸出*/
ini_set('display_errors',1);
/*通過(guò)error_reporting()函數(shù)設(shè)置在本腳本中,輸出所有級(jí)別的錯(cuò)誤報(bào)告*/
error_reporting(E_ALL);
/*“注意(notice)”的報(bào)告,不會(huì)阻止腳本的執(zhí)行,并且不一定是一個(gè)問(wèn)題*/
getType($var);//調(diào)用函數(shù)時(shí)提供的參數(shù)變量沒(méi)有在之前聲明
/*“警告(warning)”的報(bào)告,指示一個(gè)問(wèn)題,但是不會(huì)阻止腳本的執(zhí)行*/
getType();//調(diào)用函數(shù)時(shí)沒(méi)有提供必要的參數(shù)
/*“錯(cuò)誤(error)”的報(bào)告,它會(huì)終止程序,腳本不會(huì)再向下執(zhí)行*/
get_Type();//調(diào)用一個(gè)沒(méi)有被定義的函數(shù)
?>
PHP錯(cuò)誤報(bào)告行為的配置指令
display_startup_errors= Off
是否顯示PHP引擎在初始化時(shí)遇到的錯(cuò)誤。
log_errors= On
決定日志語(yǔ)句記錄的位置。
error_log(默認(rèn)null)
指定錯(cuò)誤寫進(jìn)的文件或記錄錯(cuò)誤日志于系統(tǒng)日志syslog。
Log_errors_max_len=1024
每個(gè)日志項(xiàng)的最大長(zhǎng)度,單位是字節(jié)。0表示最大。
二、錯(cuò)誤日志
兩種方式記錄錯(cuò)誤日志:
使用指定的文件記錄錯(cuò)誤報(bào)告日志
錯(cuò)誤日志記錄到操作系統(tǒng)的日志里
使用指定的文件記錄錯(cuò)誤報(bào)告日志
1、先配置php.ini:
error_reporting= E_ALL//將向PHP發(fā)送每個(gè)錯(cuò)誤
display_errors=Off//不顯示錯(cuò)誤報(bào)告
log_errors=On//決定日志語(yǔ)句記錄的位置。
log_errors_max_log=1024// 每個(gè)日志項(xiàng)的最大長(zhǎng)度
error_log=G:/myerror.log//指定錯(cuò)誤寫進(jìn)的文件
2、使用函數(shù):在php文件中使用error_log()來(lái)記錄日志,就可以將信息寫入到myerror.log文件中
如:
error_log("登錄失敗了!");
3、使用四個(gè)函數(shù)來(lái)記錄日志:
define_syslog_variables();//為系統(tǒng)日志初始化配置 openlog();//打開(kāi)一個(gè)日志鏈接 syslog();//發(fā)送一條日志
例子
<?php
if(!Ora_Logon($username, $password)){
error_log("Oracle數(shù)據(jù)庫(kù)不可用!", 0);
//將錯(cuò)誤消息寫入到操作系統(tǒng)日志中
}
if(!($foo=allocate_new_foo()){
error_log("出現(xiàn)大麻煩了!", 1, "webmaster@www.mydomain.com"); //發(fā)送到管理員郵箱中
}
error_log("搞砸了!",2, "localhost:5000");
//發(fā)送到本機(jī)對(duì)應(yīng)5000端口的服務(wù)器中
error_log("搞砸了!", 3, "/usr/local/errors.log");
//發(fā)送到指定的文件中
?>
<?php
define_syslog_variables();
openlog("PHP5", LOG_PID , LOG_USER);
syslog(LOG_WARNING, "警告報(bào)告向syslog中發(fā)送的演示,警告時(shí)間:".date("Y/m/dH:i:s"));
closelog();
?>
查看日志:如windows系統(tǒng),通過(guò)右擊“我的電腦”-> 選擇管理選項(xiàng)->在系統(tǒng)工具菜單中選擇事件查看器->在應(yīng)用程序選項(xiàng)中即可看到日志了
三、異常處理
異常(Exception)處理用于在指定的錯(cuò)誤發(fā)生時(shí)改變腳本的正常流程。是PHP5中的一個(gè)新的重要特性。異常處理是一種可擴(kuò)展、易維護(hù)的錯(cuò)誤處理統(tǒng)一機(jī)制,并提供了一種新的面向?qū)ο蟮腻e(cuò)誤處理方式。
異常處理格式:
try{
//使用try去包含可能會(huì)發(fā)生異常的代碼.
//一旦出現(xiàn)異常try進(jìn)行捕獲異常,交給catch處理。
//拋出異常語(yǔ)句:throw 異常對(duì)象。
}catch(異常對(duì)象參數(shù)){
//在這里做異常處理。
}[catch(。,,){
.. .. ..
}]
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP錯(cuò)誤與異常處理方法總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《PHP基本語(yǔ)法入門教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
php中current、next與reset函數(shù)用法實(shí)例
這篇文章主要介紹了php中current、next與reset函數(shù)用法,以實(shí)例形式詳細(xì)講述了PHP中針對(duì)數(shù)組操作的函數(shù)current、next與reset的具體用法,對(duì)于深入了解數(shù)組的用法具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-11-11
thinkphp備份數(shù)據(jù)庫(kù)的方法分享
這篇文章主要介紹了thinkphp備份數(shù)據(jù)庫(kù)的方法分享,非常的簡(jiǎn)單實(shí)用,推薦給有需要的小伙伴們2015-01-01
php專用數(shù)組排序類ArraySortUtil用法實(shí)例
這篇文章主要介紹了php專用數(shù)組排序類ArraySortUtil用法,實(shí)例分析了ArraySortUtil實(shí)現(xiàn)數(shù)組排序的方法與對(duì)應(yīng)使用技巧,需要的朋友可以參考下2015-04-04
PHP實(shí)現(xiàn)無(wú)限極分類的兩種方式示例【遞歸和引用方式】
這篇文章主要介紹了PHP實(shí)現(xiàn)無(wú)限極分類的兩種方式,結(jié)合實(shí)例形式分析了php基于遞歸和引用方式進(jìn)行數(shù)組遍歷的相關(guān)操作技巧,需要的朋友可以參考下2019-03-03
PHP編程過(guò)程中需要了解的this,self,parent的區(qū)別
this是指向?qū)ο髮?shí)例的一個(gè)指針,在實(shí)例化的時(shí)候來(lái)確定指向;self是對(duì)類本身的一個(gè)引用,一般用來(lái)指向類中的靜態(tài)變量;parent是對(duì)父類的引用,一般使用parent來(lái)調(diào)用父類的構(gòu)造函數(shù)。2009-12-12
php is_file()和is_dir()用于遍歷目錄時(shí)用法注意事項(xiàng)
遍歷一個(gè)目錄并區(qū)分顯示其中的文件和子目錄文件夾的實(shí)現(xiàn)代碼。2010-03-03
php自定義函數(shù)實(shí)現(xiàn)漢字轉(zhuǎn)換utf8編碼的方法
這篇文章主要介紹了php自定義函數(shù)實(shí)現(xiàn)漢字轉(zhuǎn)換utf8編碼的方法,涉及php針對(duì)字符串的遍歷、截取及編碼轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2016-09-09

