2013-02-27 123 views
1
$name = 'mybigfile.csv'; 
    $fp = fopen(...); 
    while($row = mysql_fetch_assoc($sql_result)) { 
     fputcsv($fp, $row); 
    } 
    fclose($fp); 



// send the correct headers 
header("Content-Type: application/csv etc ...."); 
header("Content-Length: " . filesize($name)); 

// dump the file and stop the script 
readfile($name); 
exit; 

此方法工作正常,但其中一些文件相當大,所以這使得它非常緩慢的過程......我在想 - 也許如果我可以避免創建文件的過程先寫入數據然後再讀取數據並輸出.... .ie如果我在while循環和while循環中的回顯行(而不是一行寫入)之前發送頭文件或類似的東西。這會更有效嗎?你會建議我改進這個過程嗎?感謝閱讀大文件並強制下載

回答

2

寫直接輸出:

header("Content-Type: application/csv etc ...."); 

while ($row = mysql_fetch_assoc($sql_result)) { 
    fputcsv(STDOUT, $row); 
} 

看到這裏供參考:http://www.php.net/manual/en/wrappers.php.php

+0

THX ..所以我是正確的,在這種情況下創建一個文件是一個開銷? – user1421214 2013-02-27 16:05:02

+0

是的,非常非常。 – deceze 2013-02-27 16:05:34

+0

我得到這個錯誤 - 消息:使用未定義的常數標準輸出 - 假定'標準輸出'? ...我需要使用.. php:// stdout ?? ...呃......我認爲這$ stdout = fopen('php:// stdout','w'); ... – user1421214 2013-02-27 16:34:51