在编写.csv文件时,我使用fputcsv,如下所示:
- open a temporary file $f = tmpfile(); - write content to file using fputcsv($f,$csv_row); - send appropriate headers for attachment - read file like this: # move pointer back to beginning rewind($f); while(!feof($f)) echo fgets($f); # fclose deletes temp file ! fclose($f);
另一个方法是:
- open file $f = fopen('php://output', 'w'); - send appropriate headers for attachment - write content to file using fputcsv($f,$csv_row); - close $f stream
第一种方法会使用更多写入并消耗更多资源,但输出速度会非常快。
第二种方法使用较少的写入,并且我认为输出会更慢。
急切地等待你的意见。
感谢。
答案 0 :(得分:0)
fpassthru()会做你在较低级别所做的事情。像这样使用它:
# move pointer back to beginning
rewind($f);
while(fpassthru($f) !== false);
# fclose deletes temp file !
fclose($f);
即使它可能是csv文件,也不需要将自己限制为csv函数,除非您在输出时生成文件。
如果将CSV流式传输到输出而不是文件,则可能会看到性能提升。
答案 1 :(得分:0)
为什么需要将csv内容写入tmp文件/ php的输出流?
您只需要直接回复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;