在 PHP 程式開發中,建立完善的日誌記錄機制是專業開發者的基本素養。許多開發者在前期為了趕進度而忽略錯誤記錄,殊不知這會為後期維護和除錯埋下巨大隱患,最終花費的時間成本遠超前期投入。error_log() 正是 PHP 內建的核心函數,專門用於將錯誤訊息發送到指定位置,在開發除錯階段尤為常用。
最常見的用法是將錯誤訊息寫入指定檔案:
<?php $str = '這是條錯誤訊息。'; error_log($str, 3, 'errors.log'); ?>
上述程式碼會自動建立 errors.log 檔案(若不存在),並將訊息寫入其中。注意第三個參數 3 代表「寫入檔案」模式,此參數不可省略或更改。
錯誤訊息: Warning: error_log() [function.error-log]: failed to open stream: Permission denied
原因: 目標目錄或檔案缺乏寫入權限。
解決: 為 Web 伺服器進程(如 www-data、nginx、apache)授予該目錄的寫入權限。
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(寄送郵件)時使用 |
error_log 設定而定,IIS 下較常見)destination 指定的電子郵件地址,可用 extra_headers 設定郵件標頭destination 指定的檔案,訊息會追加在檔案末尾(不自動換行)<?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)