php錯誤處理之錯誤報告級別

錯誤回報等級

錯誤類型

php大家最常見的錯誤顯示截圖,本書幫大家進行了總結:

【掌握等級的錯誤類型】 我們將最常用的錯誤分成了三種:

#錯誤類型
#E_ERROR錯誤,檔案直接中斷
#E_WARNING警告,問題比較嚴重。但也會繼續向下執行
E_NOTICE提示,有些小問題不會影響程式。常發生在專案未定義
E_PARSE編譯時語法解析錯誤。解析錯誤僅由分析器產生。
E_ALL所有的錯誤
#E_STRICT啟用PHP對程式碼的修改建議,以確保程式碼具有最佳的互通性和向前相容性。
E_DEPRECATED啟用後將對未來版本可能無法正常運作的程式碼給予警告。


在上面的幾種型別中:

error最嚴重,必須要解決。不然程式無法繼續向下執行

warning也很重要。通也必須解決。如果明確的,故意的可以不用處理。

notice 你可以不用管。但是在有些公司,專案標準特別高。在高標準要求的項目中也必須解決。因為,notice會影響PHP的執行效率。通常發生在函數未定義等。

parse錯誤,是指語法錯誤寫錯了,必須解決

代表全部類型的所有錯誤

【了解等級的錯誤類型】 再從這三種擴展出來了另外一些需要了解的錯誤項:

E_CORE_ERROR在PHP初始化啟動過程中發生的致命錯誤。此錯誤類似E_ERROR,但是是由PHP引擎核心產生的E_CORE_WARNINGPHP初始化啟動過程中發生的警告 (非致命錯誤) 。類似 E_WARNING,但是是PHP引擎核心產生的。 E_COMPILE_ERROR致命編譯時錯誤。類似E_ERROR,但是是由Zend腳本引擎產生的。 E_COMPILE_WARNING編譯時警告(非致命錯誤)。類似E_WARNING,但是是Zend腳本引擎產生的E_USER_ERROR使用者自訂錯誤E_USER_WARNING用戶自訂警告E_USER_NOTICE#用戶自訂提示用戶產少的警告訊息。類似E_DEPRECATED,但是是由使用者自己在程式碼中使用PHP函數trigger_error()來產生的。
#錯誤類型
##E_USER_DEPRECATED
######E_RECOVERABLE_ERROR######可被捕捉的致命錯誤。它表示發生了一個可能非常危險的錯誤,但還沒有導致PHP引擎處於不穩定的狀態。 ############


在學習過程中,上面的類型了解即可。因為基本上不會遇到,遇到了大家去查一下或查一下手冊就清楚了。

error_reporting 報告錯誤類型

error_reporting 是指錯誤報告。在php.ini中也有這樣一個參數。這個參數。決定了PHP引擎記錄、報告、顯示哪些錯誤類型。

一、 在php.ini中error_reporting參數。如若error_reporting參數設定為0。整個PHP引擎發出錯誤均不會顯示、輸出、記錄。在下一章將要講到的日誌記錄中,也不會記錄。

如果我們想顯示所有錯誤可以寫上

error_reporting = E_ALL

想要顯示所有錯誤但排除提示,可以將這個參數寫成:

error_reporting = E_ALL & ~ E_NOTICE

顯示所有錯誤,但排除提示、相容性和未來相容性。可寫為:

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED

二、在某些情況下我們無權限操作php.ini文件,又想要控制error_reporting怎麼辦呢?

在運行的xxxx.php檔案中開始處,我們可以使用error_reporting()函數灰達到目標。

示範程式碼如下:

<?php

//关闭了所有的错误显示
error_reporting(0);


//显示所有错误
//error_reporting(E_ALL);

//显示所有错误,但不显示提示
//error_reporting(E_ALL & ~ E_NOTICE);
?>

上面的程式碼你可以試試,故意寫錯程式碼看看。在目前文件中也會不會顯示指定的錯誤。

[擴充、了解知識點]: @ 符是我們之前學過的單行不顯示錯誤,請不用或少用@符。

我們拿讀取一個不存在的文件,這樣的php程式碼來示範實作過程:

<?php
//读取一个不存在的adsaf.txt文件,用@符抑制错误
@$fp = fopen('adsaf.txt','r');
?>

@符效率較低,它在php核心中的實作過程是:

<?php
//关闭错误
error_reporting(0);

//读取一个不存在的文件,显示错误

//显示错误
error_reporting(E_ALL & ~ E_NOTICE);
?>


繼續學習
||
<?php //关闭错误 error_reporting(0); //读取一个不存在的文件,显示错误 //显示错误 error_reporting(E_ALL & ~ E_NOTICE); ?>