在编写.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;