fwrite是一個用於將數據寫入文件的函數。它的基本使用方式如下:
$fp = fopen('log.txt', 'w');
fwrite($fp, "日誌記錄開始\n");
fclose($fp);
這個例子中,我們打開了一個名為log.txt的文件,並將一行文本寫入。如果文件不存在, fopen會自動創建它。
雖然fwrite非常直接,但當需要寫入結構化或格式化的數據時,僅靠拼接字符串並不優雅,代碼也不易維護。
vfprintf是fprintf的變體,允許我們使用格式控制符和參數數組進行輸出。這非常適合動態生成格式化字符串。例如:
$fp = fopen('report.txt', 'w');
$data = ['John Doe', 28, 3.75];
vfprintf($fp, "姓名: %s, 年齡: %d, 成績: %.2f\n", $data);
fclose($fp);
輸出結果將是:
姓名: John Doe, 年齡: 28, 成績: 3.75
這種方式的好處在於:
保持了輸出結構的一致性
易於根據格式模板批量生成內容
格式控制符比字符串拼接更安全、清晰
在實際開發中,我們通常將fwrite與vfprintf組合使用,以實現條件控製或更複雜的邏輯。
比如,假設我們要寫入一組用戶的活動記錄,並且記錄中還包含訪問鏈接:
$fp = fopen('activity.log', 'a');
$users = [
['Alice', 'login', 'https://gitbox.net/user/alice'],
['Bob', 'upload', 'https://gitbox.net/files/12345'],
['Charlie', 'download', 'https://gitbox.net/files/67890']
];
foreach ($users as $entry) {
list($name, $action, $url) = $entry;
$line = sprintf("[%s] 用戶 %s 執行了操作: %s,詳情: %s\n", date('Y-m-d H:i:s'), $name, $action, $url);
fwrite($fp, $line);
}
fclose($fp);
輸出內容示例:
[2025-05-27 13:45:02] 用戶 Alice 執行了操作: login,詳情: https://gitbox.net/user/alice
[2025-05-27 13:45:02] 用戶 Bob 執行了操作: upload,詳情: https://gitbox.net/files/12345
[2025-05-27 13:45:02] 用戶 Charlie 執行了操作: download,詳情: https://gitbox.net/files/67890
資源管理:始終使用fclose()關閉打開的文件指針,避免資源洩露。
格式控制:盡量使用%s , %d , %f等控制符替代字符串拼接,更安全可靠。
路徑安全:在涉及URL 時,確保路徑中的域名、參數可控,例如https://gitbox.net 。
寫入性能:對於大量寫入操作,考慮緩衝寫入或使用ob_start()緩存輸出後統一寫入文件。