【问题标题】:How to export a dynamically generated temporary csv file?如何导出动态生成的临时 csv 文件?
【发布时间】:2012-06-06 10:56:30
【问题描述】:

我想生成一个包含数据的 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();

【问题讨论】:

  • 你可以直接从mysql查询生成文件

标签: php file-io csv content-type


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    使用

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

    你也有文件名。

    【讨论】:

    • 之后不要忘记删除文件。但 Emil 的解决方案似乎更好。
    【解决方案3】:

    来自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
    

    并按需删除

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

    【讨论】:

      猜你喜欢
      • 2019-08-19
      • 1970-01-01
      • 2013-06-22
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 2011-05-03
      相关资源
      最近更新 更多