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

Php 如何导出动态生成的临时csv文件?,php,file-io,csv,content-type,Php,File Io,Csv,Content Type,我想用数据生成一个csv文件,这是我通过查询数据库得到的。然后,浏览器应提示用户下载该文件。问题是,readfile函数需要一个文件名而不是句柄,但我找不到一个函数来获取这个临时文件的文件名。 我想有更好的方法,但我找不到 $handle = tmpfile(); fputcsv($handle, array('year', 'month', 'product', 'count')); header('Content-Type: application/csv'); header('Conten

我想用数据生成一个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();
您正在寻找将文件指针重置为文件的开头,然后是输出文件的所有内容

rewind($handle);
fpassthru($handle);
另一个解决方案是生成一个唯一的文件,该文件在关闭时不会被删除。使用完毕后,不要忘记手动将其删除

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

您也有文件名。

来自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
并在需要时删除它


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

之后不要忘记删除文件。但是Emil的解决方案似乎更好。您可以直接从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