在php開發中我們一般會使用php自帶的錯誤處理方法來處理一些錯誤,但是有些我們需要自定義一些錯誤處理機制來解決系統自帶不能解決的問題。
基本的錯誤處理:使用 die() 函數
第一個例子展示了一個打開文本文件的簡單腳本:
如果文件不存在,您會獲得類似這樣的錯誤:
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:webfoldertest.php on line 2為了避免用戶獲得類似上面的錯誤消息,我們在訪問文件之前檢測該文件是否存在:
<?php
if(!file_exists("welcome.txt"))
{
die("File not found");
}
else
{
$file=fopen("welcome.txt","r");
}
?>
現在,假如文件不存在,您會得到類似這樣的錯誤消息:
File not found比起之前的代碼,上面的代碼更有效,這是由於它采用了一個簡單的錯誤處理機制在錯誤之後終止了腳本。
不過,簡單地終止腳本並不總是恰當的方式。讓我們研究一下用於處理錯誤的備選的 PHP 函數。
下面我們來看一個自定錯誤處理函數
代碼如下 復制代碼function myErrorHandler($errno, $errstr, $errfile, $errline){
if(!(error_reporting() &$errno)){return;}
switch ($errno){
case E_USER_ERROR:
echo "<b>My ERROR</b> [$errno] $errstr<br/>";
echo "錯誤行:$errline 在文件:$errfile之中<br/>";
echo " PHP版本: " .PHP_VERSION ." (" .PHP_OS .")<br/>";
break;
case E_USER_WARNING:
echo "<b>My WARNING</b> [$errno] $errstr<br/>";
break;
case E_USER_NOTICE:
echo "<b>My NOTICE</b> [$errno] $errstr<br />";
break;
default:
echo "Unknown error type: [$errno] $errstr<br />";
break;
}
return true;
}
function trigger_test($age){//拋出錯誤的測試函數
if($age <= 0 || $age > 999) trigger_error("年齡不合法:$age歲", E_USER_ERROR);
if($age < 18) trigger_error("未成年:$age歲", E_USER_WARNING);
if($age > 40 && $age < 100) trigger_error("年齡稍大:$age歲", E_USER_NOTICE);
}
//如果只是簡單統一地處理錯誤:
$errorHandler = set_error_handler("myErrorHandler");
trigger_test(1000);//會拋出一個error級的錯誤
function myError($errno, $errstr, $errfile, $errline){
print_r(func_get_args());
//具體處理方法
}
function myWarning($errno, $errstr, $errfile, $errline){
print_r(func_get_args());
//具體處理方法
}
function myNtice($errno, $errstr, $errfile, $errline){
print_r(func_get_args());
//具體處理方法
}
//如果要分別處理不同錯誤級別:
代碼如下 復制代碼 set_error_handler('myError',E_USER_ERROR);trigger_error('故意拋出個錯誤,還是很嚴重的哪一種!',E_USER_ERROR);
下面還附上php一些錯誤代碼詳解
必需。為用戶定義的錯誤規定錯誤報告級別。必須是一個值數。
參見下面的表格:錯誤報告級別。
error_message 必需。為用戶定義的錯誤規定錯誤消息。 error_file 可選。規定錯誤在其中發生的文件名。 error_line 可選。規定錯誤發生的行號。 error_context 可選。規定一個數組,包含了當錯誤發生時在用的每個變量以及它們的值。錯誤報告級別
這些錯誤報告級別是錯誤處理程序旨在處理的錯誤的不同的類型:
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 的一部分)