PHP使用fputcsv高效地编写和输出csv文件
在编写.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);PHP使用fputcsv高效地编写和输出csv文件,php,file,fputcsv,Php,File,Fputcsv,在编写.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))
# move pointer back to beginning
rewind($f);
while(fpassthru($f) !== false);
# fclose deletes temp file !
fclose($f);
-打开一个临时文件$f=tmpfile();
-使用fputcsv($f,$csv\u行)将内容写入文件;
-为附件发送适当的标题
-像这样读取文件:
#将指针移回起始位置
倒带(f美元);
而(!feof($f))
echo fgets(f);
#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
-打开文件$f=fopen('php://output","w",;
-为附件发送适当的标题
-使用fputcsv($f,$csv\u行)将内容写入文件;
-关闭$f流
我的问题是:在考虑服务器资源的情况下,什么是更快地输出数据的最佳方法?
第一种方法将使用更多的写入和消耗更多的资源,但输出速度非常快
第二种方法使用更少的写操作,我认为输出速度较慢
急切地等待您对此的意见
谢谢。将在较低级别执行您正在执行的操作。像这样使用它:
- 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);
# 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内容
这与意见无关。我们不认为其中一个更快。尝试两种方法的基准测试,你就会知道哪一种更快。@BerryLangerak是的,你是对的。我将尝试对此进行基准测试并发布结果。我正在从数据库生成一个大的.csv文件。使用php提供的内置函数总是更快。感谢fpassthru()!今天我学到了一些东西:)。因为他使用fputcsv()将任意数组转换为CSV字符串。PHP中没有stringtocsv函数,如果
$csv\u row
是一个数组,那么只需使用分隔符将其内爆即可<代码>回显内爆(“,”,$csv_行)。“\n”代码>。事实上,CSV非常复杂,而且您严重低估了它。例如,分隔符和分隔符都必须转义。如果数组中的值为“foo,bar,baz”,则内爆思想将生成一个损坏的CSV文件。“这比你想象的要难多了。”贝里朗格拉克,我知道。但是你可以自己逃走,这并不复杂。是的,这是一件复杂的事情。但无论如何,;试试看。