国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php 錯誤屏蔽 error_reporting詳解

2024-05-04 21:56:27
字體:
來源:轉載
供稿:網友

在Windows環境下:原本在php4.3.0中運行正常的程序,在4.3.1中為何多處報錯,大體提示為:Notice:Undefined varialbe:變量名稱,例如有如下的代碼:

  1. if (!$tmp_i) {  
  2. $tmp_i=10;  

在4.3.0中運行正常,在4.3.1中運行會提示Notice:Undefined varialbe:tmp_i,問題下下: 

1.問題出在哪里? 

2.應如何修改這段代碼? 

3.不改代碼,如何修改php.ini中的設置使原來在4.3.0中的程序在4.3.1的環境下運行正常?而不出現這個錯誤提示.

解決辦法,在程序開頭加一句:error_reporting(E_ALL & ~E_NOTICE); 或error_reporting(E_ALL ^ E_NOTICE);

或者修改php.ini:error_reporting = E_ALL & ~E_NOTICE

有關error_reporting()函數:

error_reporting() 設置 PHP 的報錯級別并返回當前級別,錯誤報告是按位的,或者將數字加起來得到想要的錯誤報告等級。 

E_ALL - 所有的錯誤和警告

E_ERROR - 致命性運行時錯

E_WARNING - 運行時警告(非致命性錯)

E_PARSE - 編譯時解析錯誤

E_NOTICE - 運行時提醒(這些經常是是你的代碼的bug引起的,也可能是有意的行為造成的。(如:基于未初始化的變量自動初始化為一個空字符串的事實而使用一個未初始化的變量)

E_CORE_ERROR - 發生于PHP啟動時初始化過程中的致命錯誤

E_CORE_WARNING - 發生于PHP啟動時初始化過程中的警告(非致命性錯)

E_COMPILE_ERROR - 編譯時致命性錯

E_COMPILE_WARNING - 編譯時警告(非致命性錯)

E_USER_ERROR - 用戶產生的出錯消息

E_USER_WARNING - 用戶產生的警告消息

E_USER_NOTICE - 用戶產生的提醒消息

使用方法:

error_reporting(0);//禁用錯誤報告

error_reporting(E_ALL ^ E_NOTICE);//顯示除去 E_NOTICE 之外的所有錯誤信息

error_reporting(E_ALL^E_WARNING^E_NOTICE);//顯示除去E_WARNING E_NOTICE 之外的所有錯誤信息

error_reporting(E_ERROR | E_WARNING | E_PARSE);//顯示運行時錯誤,與error_reporting(E_ALL ^ E_NOTICE);效果相同,error_reporting(E_ALL);//顯示所有錯誤

A PHP Error was encountered,Severity: Notice,Message: Undefined variable: user

一般在默認的普通PHP文件中輸出一個未定義聲明的變量是不會報錯誤的,但在codeigniter框架下卻要報錯誤,這對于想集成 添加 和 修改 頁面于一體的”懶人”很不方便,由于是初學者開始還想怎么在代碼中屏蔽這一錯誤提示呢.甚至用到了@,但聽很多人都說@會大大降低性能….

最后突然想到,是不是codeigniter有意讓這錯誤信息提示出來了呢,我們該如何去屏蔽掉這一類錯誤呢無意中搜索到了”如何讓codeigniter不顯示Notice信息?”,茅塞頓開.原來是入口index.php中的error_reporting(E_ALL);在作怪.只需要把它改成 

error_reporting(E_ALL ^ E_NOTICE); 就可以屏蔽掉這個錯誤,而不影響其他的報錯.

下邊是搜索到的一些資料:

error_reporting() 設置 PHP 的報錯級別并返回當前級別。

語法:error_reporting(report_level) 

如果參數 level 未指定,當前報錯級別將被返回。下面幾項是 level 可能的值:

1 E_ERROR

2 E_WARNING

4 E_PARSE

8 E_NOTICE

16 E_CORE_ERROR

32 E_CORE_WARNING

64 E_COMPILE_ERROR

128 E_COMPILE_WARNING

256 E_USER_ERROR

512 E_USER_WARNING

1024 E_USER_NOTICE

2047 E_ALL

2048 E_STRICT

E_NOTICE 表示一般情形不記錄,只有程式有錯誤情形時才用到,例如企圖存取一個不存在的變數,或是呼叫 stat() 函式檢視不存在的檔案.

E_WARNING 通常都會顯示出來,但不會中斷程式的執行。這對除錯很有效。例如:用有問題的常規表示法呼叫 ereg().

E_ERROR 通常會顯示出來,亦會中斷程式執行。意即用這個遮罩無法追查到記憶體配置或其它的錯誤。

E_PARSE 從語法中剖析錯誤。

E_CORE_ERROR 類似 E_ERROR,但不包括 PHP 核心造成的錯誤。

E_CORE_WARNING 類似 E_WARNING,但不包括 PHP 核心錯誤警告。

PHP 的錯誤報告

php.ini 文件中有許多配置設置。您應當已經設置好自己的 php.ini 文件并把它放在合適的目錄中,就像在 Linux 上安裝 PHP 和 Apache 2 的文檔說明中所示的那樣。在調試 PHP 應用程序時,應當知道兩個配置變量。下面是這兩個變量及其默認值:

display_errors = Off  error_reporting = E_ALL

通過在 php.ini 文件中搜索它們,可以發現這兩個變量當前的默認值。display_errors 變量的目的很明顯 —— 它告訴 PHP 是否顯示錯誤。默認值是 Off。但是,要讓開發過程更加輕松,請把這個值設為 On

display_errors = On 

error_reporting 變量的默認值是 E_ALL。這個設置會顯示從不良編碼實踐到無害提示到出錯的所有信息。E_ALL 對于開發過程來說有點太細,因為它在屏幕上為一些小事(例如變量未初始化)也顯示提示,會搞糟瀏覽器的輸出。我只想看到錯誤和不良編碼實踐,但是不想看到無害的提示。所以,請用以下值代替 error_reporting 的默認值:error_reporting = E_ALL & ~E_NOTICE

重新啟動 Apache,就全部設置好了。接下來,將學習如何在 Apache 上做同樣的事。

服務器上的錯誤報告:

依賴于 Apache 正在做的工作,在 PHP 中打開錯誤報告可能沒法工作,因為在計算機上可能有多個 PHP 版本。有時很難區分 Apache 正在使用哪個 PHP 版本,因為 Apache 只能查看一個 php.ini 文件。不知道 Apache 正在使用哪個 php.ini 文件配置自己是一個安全問題。但是,有一種方法可以在 Apache 中配置 PHP 變量,從而保證設置了正確的出錯級別。

而且,最好知道如何在服務器端設置這些配置變量,以否決或搶占 php.ini 文件,從而提供更高級別的安全性。

在配置 Apache 時,應該已經接觸過 /conf/httpd.conf 中 http.conf 文件中的基本配置。

要做在php.ini文件中已經做過的事,請把下列各行添加到 httpd.conf,覆蓋任何 php.ini 文件:

php_flag display_errors on php_value error_reporting 2039 

這會覆蓋在 php.ini 文件中為 display_errors 已經設置的標志,以及 error_reporting 的值。值 2039 代表 E_ALL & ~E_NOTICE。如果愿意采用 E_ALL,請把值設為 2047。同樣,還是要重啟 Apache。

接下來,要在服務器上測試錯誤報告。

關于error_reporting()這個函數,它是可以屏蔽到一些錯誤信息,但是PHP 核心造成的錯誤,是無法屏蔽的,因為PHP 核心造成的錯誤會直接導致PHP文件編譯失敗,因為書寫格式沒有按照PHP的編碼規則寫而造成的錯誤,是無法屏蔽的 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桐庐县| 礼泉县| 新泰市| 泽库县| 东城区| 榕江县| 阳信县| 措勤县| 黄浦区| 巩义市| 蕉岭县| 宜宾市| 南皮县| 沈阳市| 茂名市| 治县。| 新余市| 绍兴市| 达尔| 安顺市| 婺源县| 漳平市| 峨山| 田林县| 东辽县| 焦作市| 台东县| 师宗县| 广平县| 正定县| 石家庄市| 大港区| 霍林郭勒市| 富锦市| 阳原县| 玉溪市| 崇信县| 涡阳县| 古浪县| 永川市| 稷山县|