首頁 >後端開發 >PHP問題 >php怎麼設定錯誤日誌

php怎麼設定錯誤日誌

青灯夜游
青灯夜游原創
2021-07-20 19:12:482560瀏覽

設定方法:開啟php.ini文件,設定「error_reporting=E_ALL」、「display_errors=Off」、「log_errors=On」、「error_log = E:/php_log/php_error.log」等。

php怎麼設定錯誤日誌

本教學操作環境:windows7系統、PHP7.1版,DELL G3電腦

對於PHP 開發者來說,一旦某個專案投入使用,應該立即將設定檔php.ini 中的display_errors 選項關閉,以免因為這些錯誤所透露的路徑、資料庫連接、資料表等資訊而遭到駭客攻擊。但是任何一個專案在投入使用後,都難免會有錯誤出現,那麼如何記錄一些對開發者有用的錯誤報告呢?

我們可以在單獨的文字檔案中將錯誤報告作為日誌記錄。錯誤日誌的記錄,可以幫助開發人員或管理人員查看系統是否有問題。如果需要將程式中的錯誤報告寫入錯誤日誌中,只要在 PHP 的設定檔中,將設定項 log_errors 開啟即可。

錯誤報告預設會記錄到 Web 伺服器的日誌檔案裡,例如記錄到 Apache 伺服器的錯誤日誌檔案 error.log 中。當然也可以將錯誤日誌記錄到指定的檔案中。

使用指定的檔案記錄錯誤報告日誌

#如果想要使用自己指定的檔案記錄錯誤日誌,請務必確保這個檔案存放在文檔根目錄之外,以減少遭到攻擊的可能。並且該檔案一定要讓 PHP 腳本具有寫入權限。假設在 Linux 作業系統中,將 /usr/local/ 目錄下的 error.log 文件作為錯誤日誌文件,並設定 Web 伺服器進程使用者俱有寫入的權限。然後在 PHP 的設定檔中,將 error_log 指令的值設定為這個錯誤日誌檔案的絕對路徑。

需要將 php.ini 中的設定指令做如下修改:

error_reporting  =  E_ALL                             // 将会向PHP报告发生的每个错误  
display_errors = Off                                     // 不显示满足上条 指令所定义规则的所有错误报告  
log_errors = On                                           // 决定日志语句记录的位置  
log_errors_max_len = 1024                         // 设置每个日志项的最大长度  
error_log = E:/php_log/php_error.log         // 指定产生的错误报告写入的日志文件位置

PHP 的設定檔按上面的方式設定完成以後,並重新啟動 Web 伺服器。這樣,在執行 PHP 的任何腳本檔案時,產生的所有錯誤報告都不會在瀏覽器中顯示,而是記錄在自己指定的錯誤日誌 E:/php_log/php_error.log 中。

此外,不僅可以記錄滿足 error_reporting 所定義規則的所有錯誤,還可以使用 PHP 中的 error_log() 函數把錯誤訊息傳送到 web 伺服器的錯誤日誌或到一個檔案裡。

error_log() 函數的原型如下所示:

error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] ) : bool

參數說明如下:

    ##$message:需要記錄的錯誤訊息;
  • $message_type:設定錯誤應該要傳送到何處。可能的資訊類型有以下幾個:
    • 0:(預設值)將$message 傳送到PHP 的系統日誌,使用作業系統的日誌機製或一個文件,取決於設定檔中error_log 設定了什麼;
    • 1:將$message 傳送到參數$destination 設定的郵件地址。第四個參數$extra_headers 只有在這個類型裡才會被用到;
    • 2:(已廢棄)不再是一個選項;
    • 3:$message 被送到位置為$destination 的檔案裡。字元 $message 不會預設被當作新的一行;
    • 4:將 $message 直接傳送到 SAPI 的日誌處理程序中。
  • $destination:目標,也就是錯誤訊息被傳送到的目的地。它的意義描述於以上,由 $message_type 參數決定;
  • $extra_headers:額外的頭。當 $message_type 設定為 1 的時候使用。此資訊類型使用了 mail() 的同一個內建函數。
【範例】以登入 Mysql 資料庫為例,當登入失敗時記錄錯誤訊息。

<?php
    $link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");
    if (!$link) {
        error_log(&#39;Mysql 数据库连接失败!&#39;,0);
        exit();
    }
?>

運行上面的程式碼,會在php.ini 設定檔中error_log 一項所設定的目錄中產生對應的錯誤日誌文件,檔案內容如下:

[08-May-2020 13:17:31 PRC] PHP Warning:  mysqli_connect(): (HY000/1045): Access denied for user &#39;my_user&#39;@&#39;localhost&#39; (using password: YES) in D:\WWW\index.php on line 2
[08-May-2020 13:17:31 PRC] Mysql 数据库连接失败!

推薦學習:《

PHP影片教學

以上是php怎麼設定錯誤日誌的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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