php錯誤處理之錯誤報告級別
錯誤報告級別
錯誤類型
php大家最常見的錯誤顯示截圖,本書幫大家進行了總結:
【掌握級別的錯誤類型】?我們將最常用的錯誤分為了三種:
錯誤類型 | 說明 |
---|---|
E_ERROR | 錯誤,文件直接中斷 |
E_WARNING | 警告,問題比較嚴重。但是還會繼續(xù)向下運行 |
E_NOTICE | 提示,有些小問題不會影響到程序。常發(fā)生在項目未定義 |
E_PARSE | 編譯時語法解析錯誤。解析錯誤僅僅由分析器產生。 |
E_ALL | 所有的錯誤 |
E_STRICT | 啟用PHP對代碼的修改建議,以確保代碼具有最佳的互操作性和向前兼容性。 |
E_DEPRECATED | 啟用后將會對在未來版本中可能無法正常工作的代碼給出警告。 |
在上面的幾種類型中:
error最嚴重,必須要解決。不然程序無法繼續(xù)向下執(zhí)行
warning也很重要。通也必須要解決。如果明確的,故意的可以不用處理。
notice 你可以不用管。但是在有些公司,項目標準特別高。在高標準要求的項目中也必須要解決。因為,notice會影響到PHP的執(zhí)行效率。通常發(fā)生在函數未定義等。
parse錯誤,是指語法錯寫錯了,必須要解決
代表全部類型的所有錯誤
【了解級別的錯誤類型】?再從這三種擴展出來了另外一些需要了解的錯誤項:
錯誤類型 | 錯誤說明 |
---|---|
E_CORE_ERROR | 在PHP初始化啟動過程中發(fā)生的致命錯誤。該錯誤類似E_ERROR,但是是由PHP引擎核心產生的 |
E_CORE_WARNING | PHP初始化啟動過程中發(fā)生的警告 (非致命錯誤) 。類似 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_USER_DEPRECATED | 用戶產少的警告信息。類似E_DEPRECATED,但是是由用戶自己在代碼中使用PHP函數trigger_error()來產生的。 |
E_RECOVERABLE_ERROR | 可被捕捉的致命錯誤。它表示發(fā)生了一個可能非常危險的錯誤,但是還沒有導致PHP引擎處于不穩(wěn)定的狀態(tài)。 |
在學習過程中,上面的類型了解即可。因為基本不會遇到,遇到了大家查一下本書或者查一下手冊就清楚了。
error_reporting 報告錯誤類型
error_reporting 是指錯誤報告。在php.ini中也有這樣一個參數。這個參數。決定了PHP引擎記錄、報告、顯示哪些錯誤類型。
一、 在php.ini中error_reporting參數。如若error_reporting參數設置為0。整個PHP引擎發(fā)錯誤均不會顯示、輸出、記錄。在下一章將要講到的日志記錄中,也不會記錄。
如果我們想顯示所有錯誤可以寫上:
error_reporting = E_ALL
想要顯示所有錯誤但排除提示,可以將這個參數寫為:
error_reporting = E_ALL & ~ E_NOTICE
顯示所有錯誤,但排除提示、兼容性和未來兼容性??蓪憺椋?/strong>
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); ?>