PHP编写CSV,出于某种原因输出整个网页

时间:2012-05-20 23:02:06

标签: php csv filesystems

function outputCSV($data) {
    $outstream = fopen("php://output", 'w');
    function __outputCSV(&$vals, $key, $filehandler){
        fputcsv($filehandler, $vals, ',', '"');
    }
    array_walk($data, '__outputCSV', $outstream);
    fclose($outstream);
}


function someFunctionInTheBigPHPFile() {
    header("Content-type: text/csv");
    header("Content-Disposition: attachment; filename=file.csv");
    header("Pragma: no-cache");
    header("Expires: 0");

    $mydata = array(
    array('data11', 'data12', 'data13'),
    array('data21', 'data22', 'data23'),
    array('data31', 'data32', 'data23'));

    outputCSV($mydata);
    exit;
}

输出CSV确实包含数据数组。问题是,这个数组与网页的其余部分一起显示,即调用此函数之前的所有内容以及之后的所有内容,尽管这两个函数是唯一处理任何fopen和写入文件的函数。 / p>

如何阻止网页的其余部分干扰?我只想要CSV中的数据数据..

编辑:我设法通过添加exit来切断我的阵列之后的所有内容;但是我仍然遇到整个网站在阵列之前显示的问题。

3 个答案:

答案 0 :(得分:1)

输出CSV数据后停止执行。您可以使用die()exit()

执行此操作

答案 1 :(得分:1)

在PHP文件的开头,如果要打印CSV,请立即检查(这可能是通过$ _POST或$ _GET传递的)。如果是这样,直接在函数中运行并使用exit退出该函数;。

这可以防止在创建CSV之前或之后发生任何事情。出于某种原因,页面上的所有代码都包含在新文件中,即使文件流在计算页面内容时独立打开和关闭也是如此。

这实际上只留下了你想要的东西,而不是它之前或之后的垃圾。

答案 2 :(得分:0)

也许我误解了你,但someFunctionInTheBigPHPFile()将文件打印到屏幕上。所以,你为什么要使用这个我不想要屏幕输出?