如何导出动态生成的临时csv文件?

时间:2012-06-06 10:56:30

标签: php file-io csv content-type

我想生成一个带有数据的csv文件,我通过查询数据库得到这个文件。然后浏览器应提示用户下载文件。问题是,readfile函数需要一个文件名而不是句柄,但我找不到一个函数来获取这个临时文件的文件名。 我想有更好的方法可以做到这一点,但我找不到它们。

$handle = tmpfile();
fputcsv($handle, array('year', 'month', 'product', 'count'));
header('Content-Type: application/csv');
header('Content-Disposition:attachment;filename=LS_export');
echo readfile($handle);
fclose($handle);
exit();

3 个答案:

答案 0 :(得分:13)

您正在寻找rewind将文件指针重置为文件的开头,然后fpassthru输出文件的所有内容。

rewind($handle);
fpassthru($handle);

另一种解决方案是使用tempnam生成一个唯一的文件,该文件在关闭时不会被删除。完成后不要忘记手动删除它。

$name = tempnam('/tmp', 'csv');
$handle = fopen($name, 'w');
...
fclose($handle);
readfile($name);
unlink($name);

答案 1 :(得分:2)

使用

$tmpfname = tempnam("/", "");
$handle = fopen($tmpfname, "w");
...
fclose($handle);

你也有文件名。

答案 2 :(得分:0)

来自mysql

SELECT id, name, email INTO OUTFILE '/tmp/result.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
ESCAPED BY ‘\\’
LINES TERMINATED BY '\n'
FROM users WHERE 1

并按需删除

根据需要重新定义分隔符和其他参数