在fputcsv调用之后,ob_get_contents为空

时间:2015-05-06 20:17:11

标签: php

我复制了一个传递数组和临时下载文件的函数。该数组中有很多东西(它来自一个简单的select * from table query),该文件位于一个具有777权限的空文件夹中。

function array_to_csv($array, $download) {
    ob_start();
    $f = fopen($download, 'wb') or show_error("Can't open php://output");
    $n = 0;        
    foreach ($array as $line)
    {
        $n++;
        if (!fputcsv($f, $line))
        {
            show_error("Can't write line $n: $line");
        }
    }
    fclose($f) or show_error("Can't close php://output");
    $str = ob_get_contents();
    ob_end_clean();

    echo $str;
}

它运行没有错误,并为我的数组中的每一行调用fputcsv几百次。

然而,当它到达结束并获得输出缓冲区str为空时。这是文件问题还是缓冲区问题?当我查看文件夹时,那里什么都没有。应该有吗?

1 个答案:

答案 0 :(得分:1)

  

然而,当它到达结束并获得输出缓冲区str为空时。这是文件问题还是缓冲区问题?

问题是你没有输出(echoprint_rvar_dump等等。它一直是空的。

如果您想看到整个图片修改为

    function array_to_csv($array, $download) {
        ob_start();
        $f = fopen($download, 'wb') or show_error("Can't open php://output");
        $n = 0;        
        foreach ($array as $line)
        {
            echo $line;

            $n++;
            if (!fputcsv($f, $line))
            {
                show_error("Can't write line $n: $line");
            }
        }
        fclose($f) or show_error("Can't close php://output");
        $str = ob_get_clean();

        echo $str;
    }