我想用php下载csv文件。这就是我做的事情
$filename = $reportof . '.csv';
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename="' . $filename . '";');
$f = fopen('php://output', 'w');
$delimiter = ";";
fputcsv($f, array('ID', 'Name', 'Status', 'Date', 'Rank'));
foreach ($Reports as $line) {
fputcsv($f, $line, $delimiter);
}
此处$ Reports包含我想要的所有CSV文件数据。 当我检查console-> network时,我收到这些数据作为回应。 但文件没有下载。 任何人都可以建议我哪里出错了吗?
答案 0 :(得分:0)
请务必在完成写入后关闭文件指针。
$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()
方法,这只是为了确保清除缓冲区中的任何输出,如果之前没有写入任何内容,则可以跳过此
添加了一些虚拟数据进行测试,这是有效的。
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:
答案 1 :(得分:0)
尝试使用window.open
打开包含网址的新浏览器窗口。浏览器可能不会通过AJAX请求让客户端打开屏幕。
另一个原因可能是您的浏览器试图在查看器中显示该文件,但它无法执行此操作。尝试其他浏览器?
然而,这仍然在猜测,因为您在检查器的网络选项卡中看到了内容,而没有告诉我们您如何调用脚本......