在使用 PHP 進行開發時,我們經常會遇到各種各樣的錯誤。這些錯誤訊息通常會幫助我們快速排查和解決程式碼中的問題。然而,在生產環境中,我們可能不希望將這些錯誤暴露給使用者。為此,PHP 提供了錯誤等級控制功能,讓我們可以自由地控制錯誤的顯示方式。
PHP 的錯誤等級分為8 個等級,分別是:
- E_ERROR: 致命錯誤,必須解決,否則程式碼無法繼續執行;
##E_WARNING:警告錯誤,不會導致程式碼停止執行,但需要修復;- ##E_PARSE: 語法解析錯誤,通常是由程式碼語法錯誤導致;
- E_NOTICE: 通知錯誤,不會導致程式碼停止執行,但需要修復;
- E_CORE_ERROR: 核心致命錯誤,例如PHP核心初始化時發生的錯誤;
- E_CORE_WARNING: 核心警告錯誤;
##E_COMPILE_ERROR: 編譯致命錯誤錯誤,例如包含的檔案不存在等;- E_COMPILE_WARNING: 編譯警告錯誤。
-
- PHP 的預設錯誤等級是 E_ALL,也就是開啟了所有層級的錯誤提示。在開發時,這個級別非常有用,可以幫助我們儘早發現和解決錯誤。但在生產環境中,我們通常不希望將錯誤訊息暴露給用戶,這時我們可以透過更改錯誤等級來達到控制錯誤訊息的目的。
更改錯誤等級的方式有兩種:在程式碼中使用 ini_set 函數進行配置,或修改 PHP 設定檔 php.ini。以下是兩種方式的介紹。
使用 ini_set 函數更改錯誤等級
- ini_set 函數允許我們在程式碼中暫時更改 PHP 的配置項目。我們可以使用該函數來變更 PHP 的錯誤等級。下面的程式碼範例示範如何將錯誤等級設為E_ALL & ~E_NOTICE & ~E_WARNING,也就是關閉通知與警告提示:
// 设置错误级别为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 更改錯誤等級
- 除了在程式碼中使用ini_set 函數配置錯誤級別,我們也可以在php.ini 設定檔中進行配置。 php.ini 設定檔對整個 PHP 系統生效,在每個 PHP 檔案中都可以存取設定項中的值。以下是 php.ini 設定檔中與錯誤等級相關的設定項:
; 显示所有错误
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中文網其他相關文章!