在設計PHP網頁的時候常會因為小小的疏失導致整個網頁一片空白,如果沒有PHP的錯誤訊息的話,要找到問題點會變得十分困難。因此,在網頁開發階段,可以設定php.ini,讓PHP顯示出錯誤訊息,加速偵錯(Debug)的效率。



拿以下的PHP程式為例:

<html>
    <head>
        <meta charset="UTF-8">
        <title>Magic Len PHP Website</title>
    </head>
    <body>
        <?php
            $arg = $_GET["arg"];
            echo "Input: $arg";
        ?>
    </body>
</html>

以上程式會使用GET的方式將參數接在網址(URL)後面傳入至PHP程式中,然後再顯示出來。而且我們預期一定會傳入arg參數。

如果有傳入arg參數,就會出現正常的畫面,如下:

如果發生未傳入arg參數等超出預期的情形,可能會導致出現不正常的畫面,如下:

網頁中,Input文字的右邊是空的。究竟arg參數是傳了空字串還是根本就沒有傳入arg參數呢?因為在此為了講解方便,是使用GET方法來傳遞參數,可以直接從網址一探究竟,但如果是使用POST方法,就不能直接看到了。

如果可以讓PHP顯示出發生錯誤訊息的行號和錯誤原因的話,就可以很輕易的解決問題。

讓PHP顯示錯誤訊息

只要開啟PHP的display_errors屬性,就可以讓PHP直接在有問題的網頁上顯示出錯誤訊息。如果要確認display_errors是否有開啟,可以使用phpinfo()函數,在PHP的詳細資料表格中,找到display_errors項目。

display_errors若為「Off」表示不顯示錯誤訊息。

display_errors若為On表示顯示錯誤訊息。

要設定display_errors屬性,可以修改PHP設定檔php.ini的內容,php.ini的位置可以在phpinfo函數產生出來的表格中找到Loaded Configuration File項目來查看。接著再使用文字編輯器開啟php.ini,進行編輯即可,通常會需要root權限才可以修改php.ini的內容。以Ubuntu Server 18.04的LAMP Server為例,可以使用以下指令來編輯php.ini

sudo vim /etc/php/7.2/apache2/php.ini

php-debug

php.ini內找到display_errors,將其設定為On,如下:

display_errors = On

php-debug

重啟Apache或fpm後,有問題的PHP網頁就會顯示出錯誤訊息了!

如果PHP程式不小心打錯,也會告知語法錯誤,並顯示錯誤行號。