完成写入后,请务必关闭文件指针。
$filename = $reportof . '.csv';
header('Content-Description: File Transfer');
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename="' . $filename . '";');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
$f = fopen('php://output', 'w');
ob_clean();
$delimiter = ';';
fputcsv($f, array('ID', 'Name', 'Status', 'Date', 'Rank'));
foreach ($Reports as $line) {
fputcsv($f, $line, $delimiter);
}
ob_flush();
fclose($f);
die();
编辑:
添加了ob_clean() 和ob_flush() 方法,这只是为了确保缓冲区中的任何输出都被清除,如果之前没有写入任何内容可以跳过
编辑 2:
添加了一些虚拟数据进行测试,这行得通。
header('Content-Description: File Transfer');
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename="test.csv";');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
$f = fopen('php://output', 'w');
$delimiter = ';';
$rs = [
[1, 'some name1', 'open', date('c'), 1],
[2, 'some name2', 'closed', date('c'), 2],
[3, 'some name3', 'open', date('c'), 3],
[4, 'some name4', 'closed', date('c'), 4],
[5, 'some name5', 'open', date('c'), 5],
];
fputcsv($f, array('ID', 'Name', 'Status', 'Date', 'Rank'));
foreach ($rs as $line) {
fputcsv($f, $line, $delimiter);
}
fclose($f);
die();
这会自动下载 csv: