網站 7×24 小時運作,突然冒出詭異 Bug。直接在頁面 `var_dump` 或 `echo` 錯誤?用戶會看見醜陋的堆疊追蹤,體驗瞬間崩塌。靠經驗盲猜?像大海撈針。有沒有既能精準定位錯誤,又完全不干擾用戶的辦法?有——把錯誤「靜默」寫進日誌檔。
<?php
// 1. 回報所有錯誤等級(含 Notice、Strict、Deprecated)
ini_set('error_reporting', E_ALL);
// 2. 關鍵:禁止輸出到瀏覽器
ini_set('display_errors', 'off');
// 3. 開啟日誌記錄
ini_set('log_errors', 'on');
// 4. 指定日誌儲存路徑(確保 PHP 進程有寫入權限)
ini_set('error_log', '/var/log/php/app_error.log');
// 5. 額外保障:提高記憶體與執行時間上限,防止大數據處理中斷
@ini_set('memory_limit', '512M');
@ini_set('max_execution_time', '180');
?>
| 設定 | 作用 |
|---|---|
error_reporting | 捕獲所有級別錯誤,不漏掉任何線索 |
display_errors=off | 前端乾淨如初,用戶零感知 |
log_errors=on | 啟用內建日誌機制 |
error_log | 集中管理日誌路徑,方便 logrotate、ELK 收集 |
<?php
// 在關鍵業務節點植入
error_log('[ORDER] 用戶 ' . $uid . ' 下單失敗:' . json_encode($err), 3, '/var/log/php/biz.log');
?>
這樣系統錯誤與業務異常分檔儲存,排查效率倍增。
<?php
require_once 'bootstrap.php'; // 包含上述設定
trigger_error('測試:線上除錯機制已生效', E_USER_WARNING);
// 瀏覽器顯示空白/正常頁面,日誌檔卻多了一行:
// [DD-MMM-YYYY HH:MM:SS] PHP Warning: 測試:線上除錯機制已生效 in /path/to/file on line 10
?>
部署這幾行設定,你就擁有了「隱形雷達」——用戶體驗零損傷,錯誤細節盡在掌握。