我正在使用fputcsv(顯然)在應用程序中創建表的csv文件。我簡單地發佈數據的2D陣列到:fputcsv不適用於大型陣列
function formatoutput(&$vals, $key){
foreach($vals AS $row=>&$cell){
$cell = str_replace('"', '""', $cell);
$cell = str_replace(array("\n",','), '', $cell);
}
}
function outputCSV($array) {
$outstream = fopen("php://output", "w");
function __outputCSV(&$vals, $key, $filehandler) {
fputcsv($filehandler, $vals);
}
array_walk($array, "formatoutput");
array_walk($array, "__outputCSV", $outstream);
fclose($outstream);
}
outputCSV(unserialize($_POST['data']));
所以,對於在陣列中的每一行,它其追加到csv文件。那麼,這工作正常,直到我通過一個數組約500或更多的行。
使用此功能時是否有尺寸限制?文檔沒有提及任何內容。或者是否有PHP設置會限制大小?
有這個問題在這裏:is there a file size limit when creating a csv file using php and mysql?
這基本上問的是同樣的事情,但即使有明顯的答案,它並沒有真正解釋任何可能的解決方案。它只是聲明:
「聽起來像是您的環境設置的問題 - 不是代碼或技術的限制。」
什麼是您的php.ini設置?特別是memory_limit呢? – kojiro
你不需要做任何'formatoutput'的東西。 fputcsv已經爲你做到了。基本上你是對你的輸出進行雙重編碼。一次通過你的函數,一次通過fputcsv。 –
很可能你的問題是你的函數的copy-on-change;你通過值傳遞你的數組到outputCSV,但在你的數組中改變它走....所以這是倍增內存使用.... fputcsv()沒有任何內存限制,但你的代碼重複做 –