在 PHP 中顯示所有錯誤

Subodh Poudel 2023年1月30日 2021年4月29日
  1. error_reporting('E_ALL') 函式和 ini_set() 函式與 display_errors 指令一起使用以顯示警告錯誤
  2. error_reporting('-1') 函式和 ini_set() 函式與 display_errorsdisplay_startup_errors 指令一起使用以顯示錯誤
  3. 修改 php.ini 檔案中的指令以顯示所有錯誤,包括 PHP 中的解析錯誤
在 PHP 中顯示所有錯誤

我們將介紹一種使用 error_reporting() 函式和 ini_set() 函式在 PHP 指令碼中顯示錯誤的方法。第一種方法報告錯誤,而第二種方法覆蓋 php.ini 檔案或 Apache 配置檔案並開啟以僅顯示當前指令碼的錯誤。

我們將演示另一種使用相同函式顯示 PHP 錯誤的方法-第一種方法中的 error_reporting() 函式和 ini_set() 函式。將該方法與第一個方法區分開來的關鍵點是,它使用另一個帶有 display_startup_errors 指令的 ini_set() 函式,而 error_reporting() 函式則採用整數值作為引數。

我們將介紹一個永久性的解決方案,以顯示所有 PHP 錯誤,並更改 php.ini 檔案中的配置。上面提到的兩種方法將無助於顯示解析錯誤,例如缺少大括號和分號。

error_reporting('E_ALL') 函式和 ini_set() 函式與 display_errors 指令一起使用以顯示警告錯誤

我們可以使用 error_reporting() 函式報告 PHP 指令碼中的所有型別的錯誤。為此,我們使用命名常量 E_ALL 作為函式中的引數。它報告各種 PHP 錯誤。然後,我們可以使用 ini_set() 函式顯示報告的錯誤。該函式將指令 display_errors 設定為 true。因此,它在 php.ini 檔案中設定配置以設定錯誤的可見性。但是,執行當前指令碼後,指令的原始值將在 php.ini 檔案中恢復。

為了演示,將 error_reporting(E_ALL) 編寫為指令碼程式碼的第一行。在 ini_set 功能中將 display_errors 設定為 1。回顯諸如'This is a warning errorr'之類的訊息。使用 include() 函式可包含一個名為 file.php 的外部檔案。然後執行指令碼。

下面的示例嘗試在 PHP 中顯示警告錯誤。此錯誤型別通知指令碼中存在一些問題,而沒有停止指令碼的執行。該示例在指令碼中包含檔案 file.php。由於根資料夾中沒有此類檔案,因此指令碼將不會載入該檔案並顯示錯誤。由於這是一個警告錯誤,因此 echo 語句會與錯誤一起執行。要了解有關 error_reporting() 函式的更多資訊,請訪問 PHP 手冊

示例程式碼:

# php 7.*
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
echo "This is a warning error";
include ("file.php");
?>

輸出:

This is a warning error 
**Warning**: include(file.php): failed to open stream: No such file or directory in **/var/www/html/index.php** on line **5** 
 
**Warning**: include(): Failed opening 'file.php' for inclusion (include_path='.:/usr/share/php') in **/var/www/html/index.php** on line **5**

error_reporting('-1') 函式和 ini_set() 函式與 display_errorsdisplay_startup_errors 指令一起使用以顯示錯誤

error_reporting() 函式還採用整數值作為引數。我們可以使用這種方法來顯示 PHP 中的錯誤。PHP 中有很多錯誤級別。-1 級別表示所有 PHP 錯誤。傳遞值 -1 可以在 PHP 的未來版本中使用,即使使用新的級別和常量也是如此。有時,ini_set() 函式中的 display_errors 指令並不總是處理 PHP 啟動時遇到的錯誤。在這種情況下,我們可以使用 display_startup_errors 來顯示錯誤。

例如,將 ini_set() 函式的變數設定為 display_startup_errorsdisplay_errors。在 ini_set() 函式中將它們設定為 true,由 1 表示。將 error_reporting 設定為 -1。將值 10 分配給變數 $a 並輸出變數 $b

在下面的示例中,指令碼遇到通知錯誤。該程式碼嘗試列印未定義的變數。要了解有關 ini_set() 函式的更多資訊,請訪問 PHP 手冊

示例程式碼:

#php 7.x
<?php
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);
$a = 10;
echo $b;
?>

輸出:

**Notice**: Undefined variable: b in **/var/www/html/index.php** on line **6**

修改 php.ini 檔案中的指令以顯示所有錯誤,包括 PHP 中的解析錯誤

我們可以修改 php.ini 檔案中的指令,以在上述方法無效時顯示 PHP 錯誤。php.ini 檔案包含執行 PHP 指令碼時所需的預設配置。上面提到的方法僅在執行時更改指令的值,而修改 php.ini 檔案則永久更改這些值。但是,我們不應該在生產級別上遵循這種做法。檢視 PHP 手冊以瞭解有關 PHP 中配置檔案的更多資訊。

要更改 php.ini 檔案指令的值,請首先在系統中找到該檔案。使用以下指令碼。

#php 7.x
<?php
phpinfo();
?>

找到 Loaded Configuration File,你可以看到 php.ini 檔案的位置。在檔案中,找到指令 display_errorsdisplay_startup_errors,並將其值更改為 on。找到 error_reporting 並將其更改為 error_reporting = E_ALL ^ E_NOTICE ^ E_WARNING。然後,重新啟動 Apache 的 Web 伺服器。

例如,在 PHP 檔案中,設定 error_reporting(-1)。給變數 $a 賦值 Orange,但不要在其後寫分號。在另一行中列印變數。

在程式碼示例的輸出部分中,遇到並顯示瞭解析錯誤。因此,配置 php.ini 檔案也可以顯示解析錯誤。

程式碼示例:

#php 7.x
<?php
error_reporting(-1);
$a = "Orange"
echo $a;
?>

輸出:

**Parse error**: syntax error, unexpected 'echo' (T_ECHO) in **/var/www/html/index.php** on line **6**
Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn

相關文章 - PHP Error