PHP error_reporting(E_ALL ^ E_NOTICE)一些資料整理

來源:互聯網
上載者:User

我們在程式中可能經常看到這麼一個函數

 代碼如下 複製代碼

function setErrorReporting()
{
    //從設定檔讀取當前是否為開發環境
    if (DEV_ENV == true) {
        ini_set("error_reprorting", "E_ALL & ~E_NOTICE");
        ini_set("display_errors", "on");
    } else {
        error_reporting(E_ALL);
        ini_set('display_errors', 'Off');
        ini_set("log_errors" , "On");
        ini_set('error_log', '/var/log/phperror.log');

    }
}

舉例說明:

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


例如有如下的代碼:

 代碼如下 複製代碼

if (!$tmp_i) {
$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引起的,也可能是有意的行為造成的。(如:基於未初始化的變數自動初始化為一個Null 字元串的事實而使用一個未初始化的變數)
; E_CORE_ERROR - 發生於PHP啟動時初始化過程中的致命錯誤
; E_CORE_WARNING - 發生於PHP啟動時初始化過程中的警告(非致命性錯)
; E_COMPILE_ERROR - 編譯時間致命性錯
; E_COMPILE_WARNING - 編譯時間警告(非致命性錯)
; E_USER_ERROR - 使用者產生的出錯訊息
; E_USER_WARNING - 使用者產生的警告訊息
; E_USER_NOTICE - 使用者產生的提醒訊息

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

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

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

E_PARSE 從文法中剖析錯誤。

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

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


使用方法:

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);//顯示所有錯誤

error_reporting(0)

error_reporting(255);

是列出所有提示

error_reporting(0);

是不顯示所有提示

建議使用

error_reporting(7);

只顯示嚴重錯誤

1 E_ERROR 致命的執行階段錯誤

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

4 E_PARSE 編譯時間解析錯誤

8 E_NOTICE 運行時提醒(經常是bug,也可能是有意的)

16 E_CORE_ERROR PHP啟動時初始化過程中的致命錯誤

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

64 E_COMPILE_ERROR 編譯時間致命性錯

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

256 E_USER_ERROR 使用者自訂的致命錯誤

512 E_USER_WARNING 使用者自訂的警告(非致命性錯誤)

1024 E_USER_NOTICE 使用者自訂的提醒(經常是bug,也可能是有意的)

2048 E_STRICT 編碼通訊協定化警告(建議如何修改以向前相容)

4096 E_RECOVERABLE_ERROR 接近致命的執行階段錯誤,若未被捕獲則視同E_ERROR

6143 E_ALL 除E_STRICT外的所有錯誤(PHP6中為8191,即包含所有)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.