2012-05-20 105 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文件中),儘管我從來不想添加它。 –

相關問題