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


PHP writing CSV, outputting the entire webpage for some reason

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 来切断所有继承我的数组的内容;,但我仍然遇到在数组之前显示整个网站的问题。

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

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

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

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

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