にfgetcsvでメモリ不足: Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 36 bytes)
大きなファイル
それが失敗している行は、コードのこのブロックからwhile (($dataInputRecord = fgetcsv($inputFile, $maxRowLength, ",")) !== FALSE)
です:
if (($inputFile = fopen($fileName, "r")) !== FALSE) {
while (($dataInputRecord = fgetcsv($inputFile, $maxRowLength, ",")) !== FALSE) {
// do stuff
}
fclose($inputFile);
}
全体ファイルは32MBです。 $maxRowLength
のサイズで遊んでも役に立ちませんでした。私は問題がファイルサイズであると確信しています。なぜなら、それを8 KBに切り詰めると問題が解決されるからです。ファイルサイズを気にしないようにするにはどうすればよいですか?
編集:私の上司は、ループ内のコードは
メモリは決して無限ではありません。したがって、csvファイルサイズで動作する汎用ソリューションはありません。いくつかの回避策があります。http://stackoverflow.com/questions/17520093/read-large-data-from-csv-file-in-php – fvu
私はファイル全体をメモリにロードしたくありません。ループの複数回の反復で保持される唯一の変数は、特定の条件を満たす比較的小さな配列の配列と、入力ファイルのハンドルです。 – ccs
まあ、実際の問題は、あなたが '〜をやること 'で省略したものなのです(非常に高いステークスをもって) - 私たちはそれを見るかもしれませんか? –