本文介紹PHP的異常补疑,錯誤以及如何屏蔽錯誤。
參考:
php異常歹撒、錯誤處理機(jī)制莲组、PHP錯誤提示的關(guān)閉方法詳解
首先要明白異常跟錯誤是不一樣的,異常是出現(xiàn)正常邏輯之外的情況暖夭,而錯誤是指運行時出錯了锹杈,比如,使用了一個未定義的變量等迈着,異常需要拋出(throw)才能被捕捉到竭望,而錯誤會導(dǎo)致程序執(zhí)行終止
異常
使用try{}catch{}捕獲異常
<?php
try {
throw new Exception("A terrible",13);
}
catch(Exception $e){
echo $e->getCode()."<br>";
echo $e->getMessage()."<br>";
echo '錯誤在'.$e->getFile().'行'.$e->getLine()."列<br>";
var_dump( $e->getTrace() );
echo "<br>".$e->getTraceAsString();
echo "<br>".$e->__toString()."<br>";//echo "<br>".$e;
}
?>
可以直接使用set_exception_handler
函數(shù)捕獲throw
拋出的異常
<?php
//設(shè)置一個用戶的函數(shù)(error)來處理腳本中出現(xiàn)的錯誤。
//set_exception_handler()會自動捕捉錯誤
set_exception_handler('exception1');
throw new Exception("kkkkkkkkkkkkkkkk");
function exception1(Exception $exception){
echo $exception->getMessage();
}
?>
錯誤
用戶自定義的錯誤處理
<?php
set_error_handler('errorHandler');
trigger_error("這里描述錯誤",E_USER_ERROR);
//E_USER_ERROR:該error 所特定的錯誤類型裕菠,默認(rèn)是E_USER_NOTICE
function errorHandler($errno,$errstr){
//用戶的函數(shù)需要接受兩個參數(shù):錯誤碼和描述錯誤的 string
if($errno==E_USER_ERROR){
echo "錯誤為:",$errstr.'<br>';
}
}
?>
使用函數(shù)捕獲系統(tǒng)不提示的錯誤
前幾個都不知如何使用咬清,如果使用這個可以在變量未定義就調(diào)用時提示錯誤
<?php
set_error_handler('errorHandler2');
echo $ccc;
function errorHandler2($errno,$errstr){
//用戶的函數(shù)需要接受兩個參數(shù):錯誤碼和描述錯誤的 string
if($errno==E_NOTICE){//這里應(yīng)該是如果出現(xiàn)(默認(rèn))非用戶錯誤
echo "錯誤為:",$errstr;
}
}
echo "<br>這里正常運行";
?>
屏蔽php錯誤
錯誤的種類
- 注意(Notices)這些都是比較小而且不嚴(yán)重的錯誤,比如去訪問一個未被定義的變量奴潘。通常旧烧,這類的錯誤是不提示給用戶的,但有時這些錯誤會影響到運行的結(jié)果画髓。
- ** 警告(Warnings)**這就是稍微嚴(yán)重一些的錯誤了掘剪,比如想要包含include()一個本身不存在的文件。這樣的錯誤信息會提示給用戶奈虾,但不會導(dǎo)致程序終止運行杖小。
- 致命錯誤(Fatal errors)這些就是嚴(yán)重的錯誤,比如你想要初始化一個根本不存在的類的對象愚墓,或調(diào)用一個不存在的函數(shù)予权,這些錯誤會導(dǎo)致程序停止運行,PHP也會把這些錯誤展現(xiàn)給用戶浪册。
屏蔽錯誤的方法
方法一:在有可能出錯的函數(shù)前加@
,然后or die("")
如: @mysql_connect(...) or die("Database Connect Error")
再例如:
<?php
$file=fopen("filename.php", 'r');
//返回Warning: fopen(filename.php): failed to open stream: No such file or directory in E:\xampp\htdocs\php\error-1.php on line 7
@$file=fopen("filename.php", 'r') or die('沒有找到該文件');
//返回"沒有找到該文件"
?>
方法二:編輯php.ini 扫腺,查找"display_errors =" ,將“=”后面的值改為"off村象。
可以百度有詳解笆环,在測試過程中最好不要修改
方法三:在php腳本前加error_reporting(0)攒至,屏蔽所有錯誤提示。其中躁劣,error_reporting 配置錯誤信息回報的等級迫吐。
總結(jié),異常和錯誤處理現(xiàn)在還不會應(yīng)用账忘。
屏蔽錯誤十分有用且第一種方法最常用志膀。
持續(xù)學(xué)習(xí)中,不定期更新