2012-05-20 60 views
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确实包含数据数组。问题是,该数组与网页的其余部分一起显示,即在调用此函数之前的所有内容以及它之后的所有内容,尽管这两个函数是处理任何打开和写入文件的唯一函数。PHP写入CSV,输出整个网页出于某种原因

如何阻止网页的其他部分不受干扰?我只希望在CSV数据数组..

编辑:我设法砍掉一切通过增加出口后继我的数组;但是我仍然有前阵所显示的整个网站的问题。

回答

1

在PHP文件的开头,检查直线距离,如果你要打印CSV(这是通过$ _POST或$ _GET很可能获得通过)。如果是这样,请直接在函数中运行,并使用exit退出该函数。

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

这可以有效地使你与你只想什么,而不是之前或之后的垃圾。

1

输出CSV数据后停止执行。你可以用die()exit()来做到这一点。

+0

是的,我得到了一半的工作,那么在CSV输出之前的所有内容呢? –

+0

如果请求CSV,请确保以前不输出任何内容。 – ilanco

+0

我无法真正控制,我使用WordPress和他们的表来调用批量操作函数。在这之前已经有很多事情发生,在一个我不想编辑的大系统中。 –

0

也许我误会你了,但someFunctionInTheBigPHPFile()打印出来的文件在屏幕上。那么,为什么你使用这个我你不想要一个屏幕输出?

+0

我不知道这个,运行时会按预期创建一个CSV文件。它的数组格式很好,CSV格式的底部(如我所愿),但整个网站和之前发生的所有事情(仍在新的CSV文件中),尽管我从来不想添加它。 –

相关问题