fputcsv() 將陣列寫入開啟的檔案控制代碼,自動處理欄位包含逗號、雙引號、換行的跳脫,是產生標準 CSV 的正確方式。
fputcsv(resource $stream, array $fields, string $separator = ",", string $enclosure = "\"", string $escape = "\\"): int|false
<?php
$sales = [
['east', '2005-01-01', '2005-02-01', 12.54],
['west', '2005-01-01', '2005-02-01', 546.33],
['south', '2005-01-01', '2005-02-01', 93.26],
['north', '2005-01-01', '2005-02-01', 945.21],
['All Regions', '--', '--', 1597.34],
];
$fh = fopen('file.csv', 'w');
foreach ($sales as $line) {
if (fputcsv($fh, $line) === false) {
die("CSV 寫入失敗");
}
}
fclose($fh);
echo "CSV 匯出完成";
?>
east,2005-01-01,2005-02-01,12.54 west,2005-01-01,2005-02-01,546.33 south,2005-01-01,2005-02-01,93.26 north,2005-01-01,2005-02-01,945.21 "All Regions",--,--,1597.34
fputcsv($fh, $line, ';') (歐洲慣用)fputcsv($fh, $line, ',', "'")fwrite($fh, "\xEF\xBB\xBF") 在寫入前(Excel 相容)$stmt = $pdo->query("SELECT * FROM large_table");
$fh = fopen('export.csv', 'w');
fwrite($fh, "\xEF\xBB\xBF"); // UTF-8 BOM
while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
fputcsv($fh, $row);
}
fclose($fh);
切勿手動 implode(',', $row),必須用 fputcsv() 確保 RFC 4180 相容。