您好,登錄后才能下訂單哦!
1.如果沒有錯誤處理機制會怎樣?
案例1:
<?php $fp=fopen("aa.txt","r");//打開文件,沒有驗證,是否存在該文件? echo "ok"; ?>
結果:
Warning: fopen(aa.txt) [function.fopen]: failed to open stream: No such file or directory in E:\Software_default\wamp_wwwroot\error\error01.phpon line 2
ok
來自 <http://localhost/error/error01.php>
改進
案例2:
<?php if(file_exists("aa.txt"))//絕對路徑 { echo "ok"; $fp=fopen("aa.txt","r");//打開文件 fclose($fp); } else { echo "no file"; exit(); } ?>
2.簡單的die()語句
die()語法結構等同于 exit().
die處理錯誤三張方式:
(1).使用簡單的die()語句;
(2).使用 file_exists("aaa.txt") or die("no file");
使用die()處理以上例子
案例3:
<?php if(file_exists("aaa.txt"))//絕對路徑 { echo "ok"; $fp=fopen("aa.txt","r");//打開文件 fclose($fp); } else { die("no file"); } ?>
或者更簡潔的寫法
案例4:
<?php file_exists("aaa.txt") or die("no file"); ?>
3.創建自定義函數處理錯誤
在php中,如果出現錯誤,會啟動默認機制處理錯誤的方式來處理錯誤。如案例1,如果沒有存在aa.txt,php將提示
Warning: fopen(aa.txt) [function.fopen]: failed to open stream: No such file or directory in E:\Software_default\wamp_wwwroot\error\error01.php on line 2
因此我們可以自定義錯誤方式來代替php默認錯誤機制
(1).創建自定義錯誤函數
函數必須有能力處理至少兩個參數(error level , error message),但是可以接受最多5個參數(可選:flie,line-number,error context)
(2).基本語法
A .error_function(error_level ,error_message,error_flie,error_line,error_context)
B .同時改寫 set_error_handle("error_function",錯誤級別),錯誤級別如下圖:
其中,出現warning時,不會暫停腳本運行
案例5:
<?php function my_error($errno,$errmes) { echo "<strong>錯誤級別</strong>:<font color='red'>".$errno."</font><br>"; echo "<strong>錯誤信息</strong>:".$errmes; } set_error_handler("my_error",E_WARNING); echo "測試打開aaa.txt<br>"; $fp=fopen("aaa.txt","r");//打開文件 ?>
4.錯誤觸發器
需求:有一段代碼,如果input接受一個年齡,假如年齡大于100,我認為是一個錯誤。
//傳統方法:
案例6:
If($age>100)
{
echo "too old";
exit();
}
現在可以使用自定義錯誤觸發器
案例7:
<?php $age=700; echo "age:".$age."<br>"; if($age>100) { trigger_error("年齡太大"); exit(); } ?>
結果:
age:700
Notice: 年齡太大 in E:\Software_default\wamp_wwwroot\error\error05.phpon line 7
來自 <http://localhost/error/error05.php>
從案例7,我們可以發現,使用了trigger_error(),相當于觸發了一個錯誤,從而調用php默認錯誤提示機制,因此,在此情況下,還可以進行改寫錯誤函數,即自定義錯誤函數。
其中,trigger_error()里有兩個參數,trigger_error("error_msg",error_type),默認為E_USER_NOTICE,可選有:
E_USER_WARNING,E_USER_ERROR,根據需求選擇。
注意:此處的錯誤級別通常為:E_USER_WARNING,E_USER_NOTICE,E_USER_ERROR
根據需求選擇適當類型,由于案例7出現notice錯誤,所以此處,我們應該選擇E_USER_NOTICE。
案例8:
<?php function age_error($erroro,$erromes) { echo "<strong>錯誤級別</strong>:<font color='red'>".$erroro."</font><br>"; echo "<strong>錯誤信息</strong>:".$erromes; } set_error_handler("age_error",E_USER_NOTICE);//錯誤級別通常為:E_USER_WARNING,E_USER_NOTICE,E_USER_ERROR $age=700; echo "age:".$age."<br>"; if($age>100) { trigger_error("年齡太大,大于120");//默認是E_USER_NOTICE exit(); } ?>
結果如下:
age:700
錯誤級別:1024
錯誤信息:年齡太大,大于120
來自 <http://localhost/error/error06.php>
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。