Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP使用fputcsv高效地编写和输出csv文件_Php_File_Fputcsv - Fatal编程技术网

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

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))

在编写.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);
# 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文件。“这比你想象的要难多了。”贝里朗格拉克,我知道。但是你可以自己逃走,这并不复杂。是的,这是一件复杂的事情。但无论如何,;试试看。