當前位置: 首頁> 最新文章列表> 如何用PHP 的fputcsv 函數將數組數據正確寫入CSV 文件?詳細步驟是什麼?

如何用PHP 的fputcsv 函數將數組數據正確寫入CSV 文件?詳細步驟是什麼?

M66 2025-06-26

在開發過程中,CSV 文件常用於數據導出與數據交換。 PHP 提供了一個非常方便的內置函數fputcsv() ,用於將數組格式的數據寫入CSV 文件。本文將詳細介紹如何使用fputcsv()函數將數組正確寫入一個標準的CSV 文件中。

一、什麼是fputcsv?

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']
];

三、寫入CSV 文件的完整代碼示例

我們希望將上面的數據寫入名為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的文件,內容即為我們準備的數據。

五、常見問題與註意事項

  1. 字符編碼問題:默認輸出為UTF-8,如果在Excel 中打開出現亂碼,可以在輸出前加上UTF-8 BOM頭:

     echo "\xEF\xBB\xBF"; // 添加 BOM
    
  2. 數組必須是一維的fputcsv()只接受一維數組,如果你傳入多維數組需要逐行處理。

  3. 文件權限問題:確保PHP 腳本有權限寫入指定目錄,否則fopen()會失敗。

六、總結

通過PHP 的fputcsv()函數,我們可以非常方便地將數組格式的數據寫入CSV 文件,無論是寫入本地文件還是直接通過瀏覽器下載。只需準備好數據並正確使用文件操作函數,就可以實現高效、規範的數據導出功能。