2011-06-30 58 views
1

我有一個自定義的CakePHP購物車應用程序,我試圖創建一個包含每個事務的一行數據的CSV文件。當PHP通過編譯MySql數據庫中的相關數據一次性創建CSV文件時,我遇到了內存問題。目前該CSV文件包含大約200行數據。另外,我已經考慮過在零碎的過程中每創建一個事務後在文件中附加一行數據:fopen($ mFile.csv,'a');在追加模式下fopen的PHP內存使用

我的開發人員說,當CSV文件變得太大時,我仍然會遇到內存問題,因爲PHP會將整個文件讀入內存。是這樣嗎?當使用追加模式時,PHP會嘗試將整個文件讀入內存中?如果是這樣,你能推薦一個更好的方法嗎?

由於提前, 本

回答

2

我跑到下面的腳本了幾分鐘,併產生了1.4GB的文件,遠遠超過我的PHP內存限制。我也從文件中讀取沒有問題。如果您遇到內存問題,可能是導致問題的其他問題。

$fp = fopen("big_file.csv","a"); 

for($i = 0; $i < 100000000; $i++) 
{ 
    fputcsv($fp , array("val1","val2","val3","val4","val5","val6","val7","val8","val9")); 
} 
+0

這回答了這個問題。謝謝! – pyro70

0

你不能只從數據庫中導出,像這樣:

SELECT list_fields INTO OUTFILE '/tmp/result.text' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
FROM test_table; 
+0

數據存儲在多個表中,並且必須稍微處理一下,以獲得所需格式,這是我認爲存在內存問題的地方。隨着你從數據庫導出的建議,當數據量變大時,不會出現內存問題嗎? – pyro70

+0

你可以創建一個臨時表,並從那裏導出,我懷疑它會比將整個內存讀入內存和通過php處理更小的內存佔用。 200行是微小的內存問題,我一次讀了幾百萬個項目 – 2011-07-01 00:01:37

+0

感謝龍,這可能是比創建CSV文件更好的選擇。 – pyro70