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

PHP 線上除錯利器:關閉顯示、開啟日誌、不停機追蹤錯誤

     編輯:PHP 相關知識

痛點:上線環境出錯,卻不敢開 `display_errors`

網站 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 收集

進階技巧:結合 `error_log()` 手動記錄業務關鍵點

<?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
?>

避坑指南

  • 權限:日誌目錄必須對 PHP-FPM/Apache 使用者可寫(`chown www-data:www-data /var/log/php`)
  • 磁碟:搭配 `logrotate` 定期切割,防止單檔過大撐爆磁碟
  • 敏感資訊:生產環境日誌嚴禁記錄密碼、Token、信用卡號等敏感欄位

部署這幾行設定,你就擁有了「隱形雷達」——用戶體驗零損傷,錯誤細節盡在掌握。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved