標籤:http 使用 io strong 檔案 ar 2014 問題
運行PHP指令碼時,PHP解析器會盡其所能能報告它遇到的問題。在PHP中錯誤報表的處理行為,都是通過PHP的設定檔php.ini中有關的配置指令確定的。另外PHP的錯誤報表有很多種層級,可以根據不同的錯誤報表層級提供對應的調試方法。一旦把PHP設定成呈現出發生了哪些錯誤,你可能想調整錯誤報表的層級。在下表中列出了PHP中大多數的錯誤報表層級。
如果開發人員希望在PHP指令碼中,遇到表中的某個層級的錯誤時,將錯誤訊息報告給他,則必須在設定檔php.ini中,將display_errors指令的值設定為On,開啟PHP輸出錯誤報表的功能。也可以在PHP指令碼中調用ini_set()函數,動態設定設定檔php.ini中的某個指令。(注意:如果display_errors被啟用,就會現實滿足已設定的錯誤層級的所有錯誤報表。當使用者訪問網站時,看到現實的這些訊息不僅會趕到迷惑,而且還可能會過多的泄漏有關伺服器的資訊,使伺服器變得很不安全。所以在項目開發或測試期間啟用此指令,可以根據不同的錯誤報表更好地偵錯工具。出於安全性和美感的目的,在網站投入使用時要將其禁用)。
當你正在開發網站時,會希望PHP報告特定類型的錯誤,可以通過調整錯誤報表的層級實現。可以通過以下兩種方法設定錯誤報表層級。
★可以通過在設定檔php.ini中,修改配置指令error_reporting的值,修改成功後重新啟動Web伺服器,則每個PHP指令碼都可以按調整後的錯誤層級輸出錯誤報表。下面是修改php.ini設定檔的樣本,列出幾種為error_reporting指令設定不同層級值的方式,可以把位元運算符[&(與)、|(或)|(非)]和錯誤層級常量一起使用。如下所示:
★或者可以在PHP指令碼中使用error_reporting()函數,基於各個指令碼來調整這種行為。這個函數用於確定PHP應該在特定的頁面內報告哪些類型的錯誤。該函數擷取一個數字或上表中錯誤層級常量作為參數。如下所示:
error_reporting(0); //設定為0會完全關閉錯誤報表
error_reporting(E_ALL); //將會向PHP報告發生的每個錯誤
erroro_reporting(E_ALL & ~E_NOTICE); //可以拋出任何非注意的錯誤報表
在下面的樣本中,我們在PHP指令碼中分別建立一個“注意”、一個“警告”和一個致命“錯誤”。並通過設定不同的錯誤層級,限制程式輸出沒有被允許的錯誤報表。建立一個名為error.php的指令檔,代碼如下所示:
| 1234567891011121314151617 |
<html><head><title>測試錯誤報表</title></head><body><h2>測試錯誤報表</h2><?php//開啟php.ini中的display_errors指令,只有該指令可以開啟如果有錯誤報表才能輸出ini_set(‘display_errors‘,1);//通過error_reporting()函數設定在本指令碼中,輸出所有層級的錯誤報表error_reporting(E_ALL);//注意(notice)的報告,不會組織指令碼的執行,但是不會組織指令碼的執行,並且可能不一定是一個問題getType($var); //調用函數時提供的參數變數沒有在之前聲明//警告(warning)的報告,指示一個問題,但是不會組織指令碼的執行getType(); //調用函數時沒有提供必要的參數get_Type(); //調用一個沒有被定義的函數?></body></html> |
在上面的指令碼中,為了確保設定檔中的display_errors指令開啟,通過ini_set()函數強制在該指令碼執行中啟動,並通過error_repoting()函數設定錯誤層級為E_ALL,報告所有錯誤、警告和錯誤,PHP指令碼只有在遇到錯誤時才會終止運行。
“注意”和“警告”的錯誤報表並不會終止程式運行。如果在上面的輸出結果中,不希望有注意和警告的報告輸出,就可以在指令碼error_reporting()函數,修改的代碼如下所示:
error.php中修改error_reporting(E_ALL&~(E_WARNING|E_NOTICE)); //報告除注意和警告之外的所有錯誤
除了使用error_reporting 和display_error兩個配置指令可以修改錯誤報表行為以外,還有許多配置指令可以確定PHP的錯誤報表行為。其他的一些重要指令如下表所示:
使用trigger_error()函數來替代die()
首先函數die()等同於exit(),兩者如果執行都會終止PHP程式,而且可以在退出程式之前輸出一些錯誤報表。trigger_error()則可以產生一個使用者警告來代替,使程式更具有靈活性。例如,trigger_error(“沒有找到檔案”,E_USER_ERROR)。使用trigger_error()函數來代替die(),你的代碼在處理錯誤上會更具優勢,對於客戶程式員來說更易於處理錯誤。
>> 本文固定連結: http://php.ncong.com/php_course/wrong/cuowutiaozheng.html
>> 轉載請註明: 恩聰php 2014年08月04日 於 恩聰PHP學習教程 發表