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来切断我的阵列之后的所有内容;但是我仍然遇到整个网站在阵列之前显示的问题。答案 0 :(得分:1)
输出CSV数据后停止执行。您可以使用die()
或exit()
。
答案 1 :(得分:1)
在PHP文件的开头,如果要打印CSV,请立即检查(这可能是通过$ _POST或$ _GET传递的)。如果是这样,直接在函数中运行并使用exit退出该函数;。
这可以防止在创建CSV之前或之后发生任何事情。出于某种原因,页面上的所有代码都包含在新文件中,即使文件流在计算页面内容时独立打开和关闭也是如此。
这实际上只留下了你想要的东西,而不是它之前或之后的垃圾。
答案 2 :(得分:0)
也许我误解了你,但someFunctionInTheBigPHPFile()将文件打印到屏幕上。所以,你为什么要使用这个我不想要屏幕输出?