在開發過程中,CSV 文件常用於數據導出與數據交換。 PHP 提供了一個非常方便的內置函數fputcsv() ,用於將數組格式的數據寫入CSV 文件。本文將詳細介紹如何使用fputcsv()函數將數組正確寫入一個標準的CSV 文件中。
fputcsv()是PHP 提供的一個函數,它的作用是將數組格式的數據按CSV 格式寫入打開的文件資源中。該函數會自動處理必要的分隔符、引號、換行符等問題,避免手動拼接帶來的錯誤。
函數原型如下:
fputcsv(resource $stream, array $fields, string $separator = ",", string $enclosure = "\"", string $escape = "\\"): int|false
參數說明:
$stream :文件句柄,使用fopen()打開的資源。
$fields :要寫入的一維數組,每個元素代表CSV 文件中的一列。
$separator :字段之間的分隔符,默認為逗號( , )。
$enclosure :字段值的包圍字符,默認是雙引號( " )。
$escape :轉義字符,默認是反斜杠( \ )。
假設我們有一組用戶數據,希望將其寫入CSV 文件中:
$data = [
['使用者名稱', '郵箱', '註冊時間'],
['張三', 'zhangsan@m66.net', '2025-06-10 10:00:00'],
['李四', 'lisi@m66.net', '2025-06-10 11:20:00'],
['王五', 'wangwu@m66.net', '2025-06-10 12:35:00']
];
我們希望將上面的數據寫入名為users.csv的文件中:
<?php
// 要寫入的 CSV 文件路徑
$filename = 'users.csv';
// 以寫入模式打開文件(如果文件不存在會自動創建)
$fp = fopen($filename, 'w');
if ($fp === false) {
die("無法打開文件: $filename");
}
// 要寫入的数据
$data = [
['使用者名稱', '郵箱', '註冊時間'],
['張三', 'zhangsan@m66.net', '2025-06-10 10:00:00'],
['李四', 'lisi@m66.net', '2025-06-10 11:20:00'],
['王五', 'wangwu@m66.net', '2025-06-10 12:35:00']
];
// 循環每一行數據並寫入文件
foreach ($data as $row) {
fputcsv($fp, $row);
}
// 關閉文件句柄
fclose($fp);
echo "CSV 文件寫入完成。\n";
如果你不想將文件保存到服務器,而是直接讓用戶下載這個CSV 文件,可以用如下方式:
<?php
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="users.csv"');
$fp = fopen('php://output', 'w');
$data = [
['使用者名稱', '郵箱', '註冊時間'],
['張三', 'zhangsan@m66.net', '2025-06-10 10:00:00'],
['李四', 'lisi@m66.net', '2025-06-10 11:20:00'],
['王五', 'wangwu@m66.net', '2025-06-10 12:35:00']
];
foreach ($data as $row) {
fputcsv($fp, $row);
}
fclose($fp);
通過訪問包含這段代碼的PHP 文件,瀏覽器會提示下載一個名為users.csv的文件,內容即為我們準備的數據。
字符編碼問題:默認輸出為UTF-8,如果在Excel 中打開出現亂碼,可以在輸出前加上UTF-8 BOM頭:
echo "\xEF\xBB\xBF"; // 添加 BOM
數組必須是一維的: fputcsv()只接受一維數組,如果你傳入多維數組需要逐行處理。
文件權限問題:確保PHP 腳本有權限寫入指定目錄,否則fopen()會失敗。
通過PHP 的fputcsv()函數,我們可以非常方便地將數組格式的數據寫入CSV 文件,無論是寫入本地文件還是直接通過瀏覽器下載。只需準備好數據並正確使用文件操作函數,就可以實現高效、規範的數據導出功能。