錯誤日誌類別設計
class ErrorLogger {
public function logError() {
$fp = @fopen("error.dat", "a+");
$time = date("Y-m-d H:i:s");
$msg = "{VisitedTime:$time}\n"
. "{VisitorIP:{$_SERVER['REMOTE_ADDR']}}\n"
. "{ErrorMsg:" . mysql_error() . "}\n"
. "{File:{$_SERVER['PHP_SELF']}}\n"
. "{User:{$_SESSION['user']}}\n";
@fputs($fp, $msg);
@fclose($fp);
}
}
頁面調用方式
if (mysql_error()) {
$logger->logError();
}
日誌內容範例
{VisitedTime:2002-05-09 14:43:56}
{VisitorIP:127.0.0.1}
{ErrorMsg:Duplicate entry '0' for key 1}
{File:/path/to/errorfile.php}
{User:sports98}
進階建議
- 生產環境禁用
display_errors**,僅記錄日誌,避免洩露資料庫結構、SQL 片段等敏感資訊。
include 檔案中**勿加 __LINE__**(行號指向 include 行);require 建議加入 __LINE__ 精確定位。
- 日誌檔建議存放於 Web 根目錄**外部**,防止被直接下載。
- 考慮使用
syslog、Monolog 等成熟日誌庫,支援分級、輪轉、遠端傳輸。