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((将文件打印到屏幕上。那么,你为什么要使用它 我 你不想要屏幕输出 ?