在PHP中捕获文件输出(fputcsv)

Wic*_*wok 2 php

我试图捕获输出,fputcsv()以便gzwrite()用于实际写入制表符分隔文件.基本上,我正在查询数据库,我想把这些行放到一个gzip压缩的CSV文件中,我宁愿使用而fputcsv()不是实际附加"\t""\n"任何地方.我可以通过输出缓冲或类似的东西以某种方式做到这一点吗?

这是我所拥有的基本概要:

$results = get_data_from_db();
$fp = gzopen($file_name, 'w');
if($fp) {
    foreach ($results as $row) {
        ???//something with gzwrite() ?
    }
    gzclose($fp);
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑:我的理解是,gzwrite()需要使用实际写入文件,以便实际上是gzip - 这是不正确的?

Dan*_*oap 16

正如在php.net上读到的,你可以尝试这个小技巧:

<?php
// output up to 5MB is kept in memory, if it becomes bigger
// it will automatically be written to a temporary file
$csv = fopen('php://temp/maxmemory:'. (5*1024*1024), 'r+');

fputcsv($csv, array('blah','blah'));

rewind($csv);

// put it all in a variable
$output = stream_get_contents($csv);
?>
Run Code Online (Sandbox Code Playgroud)

这实际上是你试图避免的(捕获输出),但捕获是一个非常强大的工具,所以为什么不使用它呢?

  • 将内容放入文件时,其指针指向文件的末尾.使用rewind()将文件指针重置为文件的开头,这样您就可以从开头到EOF读取完整内容. (2认同)