PHP 新手入門錯誤處理

PHP 錯誤處理

在 PHP 中,預設的錯誤處理很簡單。一條錯誤訊息會被傳送到瀏覽器,這則訊息帶有檔案名稱、行號以及描述錯誤的訊息。

在建立腳本和 Web 應用程式時,錯誤處理是一個重要的部分。如果您的程式碼缺少錯誤偵測編碼,那麼程式看起來很不專業,也為安全風險敞開了大門。

本教學介紹了 PHP 中一些最重要的錯誤偵測方法。

我們將為您解釋不同的錯誤處理方法:

    簡單的"die()" 語句

    自訂錯誤與錯誤觸發器

#錯誤報告

基本的錯誤處理:使用die() 函數

第一個實例展示了一個打開文字檔案的簡單腳本:

<?php
    $file=fopen("welcome.txt","r");
?>

#如果檔案不存在,您會得到類似這樣的錯誤:

Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in /www/php/test/test. php on line 2

為了避免使用者得到類似上面的錯誤訊息,我們在存取檔案之前偵測該檔案是否存在:

<?php
if(!file_exists("welcome.txt"))
{
	die("文件不存在");
}
else
{
	$file=fopen("welcome.txt","r");
}
?>

現在如果檔案不存在,就直接輸出檔案不存在

建立自訂錯誤處理器

建立一個自訂的錯誤處理器非常簡單。我們很簡單地創建了一個專用函數,可以在 PHP 中發生錯誤時呼叫該函數。

此函數必須有能力處理至少兩個參數(error level 和error message),但是可以接受最多五個參數(可選的:file, line-number 和error context):

語法

error_function(error_level,error_message,
error_file,error_line,error_context)

   為使用者定義的錯誤規定錯誤報告等級。必須是一個數字。請參閱下面的表格:錯誤報告層級。    

    error_message        所必需。為使用者定義的錯誤規定錯誤訊息。    

    error_file                 選擇。規定錯誤發生的檔案名稱。    

    error_line                選擇。規定錯誤發生的行號。    

    error_context          選擇。規定一個數組,包含了當錯誤發生時在用的每個變數以及它們的值。

錯誤報告等級

這些錯誤報告等級是使用者自訂的錯誤處理程序處理的不同類型的錯誤:

    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    所有錯誤與警告。 (在PHP 5.4 中,E_STRICT 成為E_ALL 的一部份)    

##建立一個處理錯誤的函數

<?php
function customError($errno, $errstr)
{
	echo "<b>Error:</b> [$errno] $errstr<br>";
	echo "脚本结束";
	die();
}
?>

上面的程式碼是一個簡單的錯誤處理函數。當它被觸發時,它會取得錯誤等級和錯誤訊息。然後它會輸出錯誤等級和訊息,並終止腳本。

現在,我們已經建立了一個錯誤處理函數,我們需要確定在何時觸發該函數

#設定錯誤處理程序

#PHP 的預設錯誤處理程序是內建的錯誤處理程序。我們打算把上面的函數改造為腳本運行期間的預設錯誤處理程序。

可以修改錯誤處理程序,使其只應用到某些錯誤,這樣腳本就能以不同的方式來處理不同的錯誤。然而,在本例中,我們打算針對所有錯誤來使用我們自訂的錯誤處理程序

set_error_handler("customError");


繼續學習
||
<?php if(!file_exists("welcome.txt")) { die("文件不存在"); } else { $file=fopen("welcome.txt","r"); } ?>