在 PHP 中输出并保存一个 csv

Outputting and saving a csv in PHP

我目前正在创建和输出如下 CSV:

header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=file.csv');
header("Cache-Control: no-store, no-cache");

$df = fopen('php://output', 'w');
fprintf($df, chr(0xEF).chr(0xBB).chr(0xBF));
foreach ($csvLines as $csvLine) {
    fputcsv($df, $csvLine);
}
exit;

但是,我不仅要输出还要将这个文件保存到磁盘。如何将 $df 写入文件?

注意 欢迎提出有关改进 CSV 生成的建议:)

只需写入两个文件指针:

$out = fopen('php://output', 'w');
$file = fopen('somefile.csv');

fprintf($out, chr(0xEF).chr(0xBB).chr(0xBF));
fprintf($file, chr(0xEF).chr(0xBB).chr(0xBF));

foreach ($csvLines as $csvLine) {
    fputcsv($out, $csvLine);
    fputcsv($file, $csvLine);
}

exit;

最简单的答案是写入文件而不是 php://output,然后使用 readfile()

将该文件直接发送到浏览器
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=file.csv');
header("Cache-Control: no-store, no-cache");

$df = fopen('/path/to/where/you/want/the/file/on/disk.csv', 'w');
fprintf($df, chr(0xEF).chr(0xBB).chr(0xBF));
foreach ($csvLines as $csvLine) {
    fputcsv($df, $csvLine);
}
readfile('/path/to/where/you/want/the/file/on/disk.csv');
exit;