首頁  >  文章  >  後端開發  >  php 更改錯誤等級

php 更改錯誤等級

PHPz
PHPz原創
2023-05-07 10:58:08756瀏覽

在使用 PHP 進行開發時,我們經常會遇到各種各樣的錯誤。這些錯誤訊息通常會幫助我們快速排查和解決程式碼中的問題。然而,在生產環境中,我們可能不希望將這些錯誤暴露給使用者。為此,PHP 提供了錯誤等級控制功能,讓我們可以自由地控制錯誤的顯示方式。

PHP 的錯誤等級分為8 個等級,分別是:

  1. E_ERROR: 致命錯誤,必須解決,否則程式碼無法繼續執行;
  2. ##E_WARNING:警告錯誤,不會導致程式碼停止執行,但需要修復;
  3. ##E_PARSE: 語法解析錯誤,通常是由程式碼語法錯誤導致;
  4. E_NOTICE: 通知錯誤,不會導致程式碼停止執行,但需要修復;
  5. E_CORE_ERROR: 核心致命錯誤,例如PHP核心初始化時發生的錯誤;
  6. E_CORE_WARNING: 核心警告錯誤;
  7. ##E_COMPILE_ERROR: 編譯致命錯誤錯誤,例如包含的檔案不存在等;
  8. E_COMPILE_WARNING: 編譯警告錯誤。
  9. PHP 的預設錯誤等級是 E_ALL,也就是開啟了所有層級的錯誤提示。在開發時,這個級別非常有用,可以幫助我們儘早發現和解決錯誤。但在生產環境中,我們通常不希望將錯誤訊息暴露給用戶,這時我們可以透過更改錯誤等級來達到控制錯誤訊息的目的。
更改錯誤等級的方式有兩種:在程式碼中使用 ini_set 函數進行配置,或修改 PHP 設定檔 php.ini。以下是兩種方式的介紹。

使用 ini_set 函數更改錯誤等級

  1. ini_set 函數允許我們在程式碼中暫時更改 PHP 的配置項目。我們可以使用該函數來變更 PHP 的錯誤等級。下面的程式碼範例示範如何將錯誤等級設為E_ALL & ~E_NOTICE & ~E_WARNING,也就是關閉通知與警告提示:
  2. // 设置错误级别为E_ALL & ~E_NOTICE & ~E_WARNING
    ini_set('error_reporting', E_ALL & ~E_NOTICE & ~E_WARNING);
    
    // 执行代码
    echo $undefinedVariable;
上述程式碼中,我們先用ini_set 函數將錯誤等級設為E_ALL & ~E_NOTICE & ~E_WARNING,然後故意存取了一個未定義的變數$undefinedVariable。由於我們關閉了通知和警告提示,PHP 並不會將 Undefined variable: undefinedVariable 這個 notice 錯誤提示給我們。然而,如果我們將錯誤級別設為E_ALL,在存取未定義的變數時,PHP 會拋出以下錯誤:

Notice: Undefined variable: undefinedVariable in /path/to/file.php on line 5
因此,透過更改錯誤級別,我們可以控制PHP 是否顯示某些類型的錯誤訊息.

修改PHP 設定檔php.ini 更改錯誤等級

  1. 除了在程式碼中使用ini_set 函數配置錯誤級別,我們也可以在php.ini 設定檔中進行配置。 php.ini 設定檔對整個 PHP 系統生效,在每個 PHP 檔案中都可以存取設定項中的值。以下是 php.ini 設定檔中與錯誤等級相關的設定項:
  2. ; 显示所有错误
    error_reporting = E_ALL
    
    ; 显示 E_NOTICE、E_WARNING 和 E_ERROR 级别的错误
    error_reporting = E_ERROR | E_WARNING | E_NOTICE
    
    ; 显示所有错误,除了 E_NOTICE 级别的错误
    error_reporting = E_ALL & ~E_NOTICE
為了對生產環境進行保護,我們通常會將錯誤等級設為 E_ALL & ~E_NOTICE & ~E_WARNING。這樣就可以關閉通知和警告提示,只顯示致命錯誤和解析錯誤。

總結

在開發過程中,我們希望儘早發現和解決錯誤,因此預設開啟所有錯誤等級的提示非常有用。然而,在生產環境中,我們通常不希望將錯誤訊息暴露給用戶,因此需要更改錯誤等級來控制錯誤訊息的顯示方式。我們可以透過 ini_set 函數或修改 PHP 設定檔 php.ini 來實現這個功能。在實際使用中,我們應該根據實際需要,靈活地配置錯誤級別,以便進行及時的錯誤排查和解決。

以上是php 更改錯誤等級的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn