PHP使用fputcsv高效地编写和输出csv文件


PHP efficiently write and output csv files using fputcsv

在编写.csv文件时,我使用fputcsv,如下所示:

-打开一个临时文件$f=tmpfile();-使用fputcsv($f,$csv_row)将内容写入文件;-发送适当的附件标题-读取如下文件:#将指针移回起始位置倒带($f);while(!feof($f))echo fgets($f);#fclose删除临时文件!fclose($f);

另一个途径是:

-打开文件$f=fopen('php://output','w');-发送适当的附件标题-使用fputcsv($f,$csv_row)将内容写入文件;-关闭$f流

我的问题是:在考虑服务器资源的情况下,更快地输出数据的最佳方法是什么?

第一种方法将使用更多的写入并消耗更多的资源,但输出速度会非常快。

第二种方法使用较少的写入,并且输出速度较慢。

急切地等待你对此的意见。

谢谢。

fpassthru()将在较低级别执行您正在执行的操作。这样使用:

# move pointer back to beginning 
rewind($f);
while(fpassthru($f) !== false);
# fclose deletes temp file !
fclose($f);

即使它可能是csv文件,也没有必要将自己限制为csv函数,除非您在输出时生成文件。

如果将CSV流式传输到输出而不是文件,您可能会看到性能提升。

为什么需要将csv内容写入tmp文件.php的输出流?

您只需要直接回显csv内容,就不应该有任何文件操作。

  • 发送适当的附件标题
  • 回显csv内容

header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");
foreach ($csv_rows as $csv_row) {
  echo $csv_row;
}
exit;