首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP error_log() 函數完整指南:將錯誤訊息寫入檔案的最佳實踐

     編輯:PHP 綜合知識

為什麼要養成寫入 Log 的習慣?

在 PHP 程式開發中,建立完善的日誌記錄機制是專業開發者的基本素養。許多開發者在前期為了趕進度而忽略錯誤記錄,殊不知這會為後期維護和除錯埋下巨大隱患,最終花費的時間成本遠超前期投入。error_log() 正是 PHP 內建的核心函數,專門用於將錯誤訊息發送到指定位置,在開發除錯階段尤為常用。

基本用法示例

最常見的用法是將錯誤訊息寫入指定檔案:

<?php
$str = '這是條錯誤訊息。';
error_log($str, 3, 'errors.log');
?>

上述程式碼會自動建立 errors.log 檔案(若不存在),並將訊息寫入其中。注意第三個參數 3 代表「寫入檔案」模式,此參數不可省略或更改。

常見問題與解決方案

1. 權限不足導致寫入失敗

錯誤訊息: Warning: error_log() [function.error-log]: failed to open stream: Permission denied

原因: 目標目錄或檔案缺乏寫入權限。

解決: 為 Web 伺服器進程(如 www-data、nginx、apache)授予該目錄的寫入權限。

2. 日誌內容無法自動換行

error_log() 預設不會在訊息後添加換行符,導致所有內容擠在同一行。解決方法是在字串末尾加上 \r\n,並使用雙引號包裹:

<?php
$str = "這是條錯誤訊息。\r\n";
error_log($str, 3, 'errors.log');
?>

記得:PHP 中雙引號會解析跳脫字元(如 \r\n),單引號則不會。

函數完整語法與參數詳解

bool error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] )
參數說明
$message要記錄的錯誤訊息內容
$message_type訊息發送目標類型(0-4,見下表)
$destination目標位置,含義取決於 message_type
$extra_headers額外標頭,僅在 message_type=1(寄送郵件)時使用

message_type 可選值

  • 0(預設):發送到 PHP 系統日誌(視 error_log 設定而定,IIS 下較常見)
  • 1:發送到 destination 指定的電子郵件地址,可用 extra_headers 設定郵件標頭
  • 2:已棄用
  • 3:發送到 destination 指定的檔案,訊息會追加在檔案末尾(不自動換行)
  • 4:直接發送到 SAPI 日誌處理程序

進階範例:寄送自定義錯誤郵件

<?php
$test = 2;
if ($test > 1) {
    error_log("A custom error has been triggered", 1, "someone@example.com", "From: webmaster@example.com");
}
?>

此範例在條件觸發時,將錯誤訊息以郵件形式寄送給指定收件者。

回傳值

成功返回 TRUE,失敗返回 FALSE。建議在正式環境中檢查回傳值,確保日誌確實寫入。

最佳實踐建議

  • 生產環境務必設定 error_log 路徑,避免錯誤訊息直接輸出到瀏覽器
  • 為不同嚴重程度的錯誤建立獨立日誌檔案(如 error.log、warning.log、debug.log)
  • 定期輪替與清理日誌檔案,防止佔滿磁碟空間
  • 敏感資訊(密碼、Token、個資)嚴禁寫入日誌
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved