error_reporting函數用法的奇特之處

發布時間:2019-06-13 19:44:09 來源:青鋒建站 作者:青鋒建站
  我們使用error_reporting函數控制PHP錯誤的顯示級別,但是這個函數卻有著許多不確定的使用與表現結果。體現在運行時的顯示級別與PHP.INI配置文件的控制級別、error_reporting對文件的生效范圍、與異常處理的結合。以下是青鋒建站給大家作下詳細分析。

error_reporting官方說法

  error_reporting() 函數能夠在運行時設置 error_reporting 指令。 PHP 有諸多錯誤級別,使用該函數可以設置在腳本運行時的級別。 如果沒有設置可選參數 level, error_reporting() 僅會返回當前的錯誤報告級別。
  level:新的 error_reporting 級別。 可以是一個位掩碼也可以是一個已命名的常量。 強烈建議使用已命名的常量,以確保兼容將來的版本。 由于錯誤級別的添加、整數取值范圍的增加, 較久的基于整數的錯誤級別不會總是和預期的表現一致。 可用的錯誤級別常量及其實際含義描述在了 predefined constants 中。

對于LEVEL運行時與PHP.INI配置文件優先級

  在運行時使用error_reporting受PHP.INI配置文件的限制,PHP.INI配置文件的優先級別高于error_reporting控制的顯示級別。也就是說如何在PHP.INI配置文件中關閉錯誤顯示和不執行錯誤,那么在運行時使用error_reporting(E_ALL);ini_set('display_errors',true);將無效。
  使用以下代碼測試,此時PHP.INI文件配置為display_errors = On和error_reporting  =  E_ALL。錯誤報告正常,如下圖。
error_reporting
  然后我們把配置文件中的的這兩項關閉,然后所有的錯誤報告不再顯示,注意這里要清除下緩存,如果不清除會導致結果不正常。

error_reporting函數可以控制的LEVEL

  error_reporting函數并不是可以控制所有的錯誤級別的報告,對于某些級別的Fatal error就無法關閉,注意是某些,以下兩種同樣是Fatal error,一個可以控制,另一個無法控制
  func_not_exists("function not exists!");//可以控制是否可以報告。
  echo 'yes' //注意這里沒有“;”用來模擬語法錯誤。這個就無法控制了。

error_reporting函數與文件的聯系

  當我們把以下四個有錯誤的語句拿到另外一個腳本,而后在主腳本進行包含,并關閉錯誤顯示來進行測試結果,腳本代碼如下:
<?php
error_reporting(0);
ini_set('display_errors',false);
require('form.php');

'form.php'文件內容如下:
trigger_error('test');//用戶觸發錯誤
echo $variable_not_exists;//通知錯誤
func_not_exists("function not exists!");//語法錯誤
echo 'i lost semicolon operator'; //語法錯誤
  最終顯示結果:當關閉錯誤執行時,通過包含過來有錯誤的文件時,不顯示錯誤。當把錯誤報告打開時,只顯示Fatal error警告級別的錯誤。
  
結論:error_reporting不能關閉當前主腳本的警告級別的錯誤,但可以關閉加載進行來腳本的錯誤。利用這個特性,保證主腳本無錯誤的情況下,可以使用error_reporting來關閉更多的錯誤。

與異常處理的結合

  在PHP7中,使用了新的機制來處理錯誤,這完全不同于PHP5中的錯誤處理機制,在PHP7中可以捕獲錯誤, 您可以通過捕獲(Throwable)捕獲異常和錯誤。Throwable在PHP5.x上不起作用。要捕獲PHP5.x和7中的異常和錯誤,請先為捕獲Throwable后的異常添加捕獲塊。一旦不再需要PHP5.x支持,就可以刪除塊捕獲異常。
  以上就是青鋒建站給大家分享的error_reporting錯誤報告顯示函數在實際運用的關鍵技巧。青鋒建站,提供專業的高品質網站制作服務,包括PHP網站建設,SEO,網絡營銷,PHP軟件開發,專業做優化型網站,為企業構建營銷平臺。
分享到:

Copyright © 2016-2026 青鋒建站 版權所有

超级狮子电子游艺