0
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 和写入文件的函数。

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

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

4

3 回答 3

1

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

于 2012-05-20T23:04:10.593 回答
1

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

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

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

于 2012-05-21T22:36:47.460 回答
0

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

于 2012-05-20T23:08:55.643 回答