2017-02-06 14 views
0
私は次のエラーを取得しています

に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に切り詰めると問題が解決されるからです。ファイルサイズを気にしないようにするにはどうすればよいですか?

編集:私の上司は、ループ内のコードは

+0

メモリは決して無限ではありません。したがって、csvファイルサイズで動作する汎用ソリューションはありません。いくつかの回避策があります。http://stackoverflow.com/questions/17520093/read-large-data-from-csv-file-in-php – fvu

+0

私はファイル全体をメモリにロードしたくありません。ループの複数回の反復で保持される唯一の変数は、特定の条件を満たす比較的小さな配列の配列と、入力ファイルのハンドルです。 – ccs

+2

まあ、実際の問題は、あなたが '〜をやること 'で省略したものなのです(非常に高いステークスをもって) - 私たちはそれを見るかもしれませんか? –

答えて

0

あなたはphp.iniでmemory_limitを変更することにより、メモリ制限を増やす可能性が行うことになっていたものについての私を誤解して

0

はまあini_set('memory_limit', '256M');

を試すように見えます

134217728 bytes = 128 MB

+1

をお勧めします。問題は解決されませんが、症状は緩和されます。これは大きなファイルではまだ失敗しますが、現在のサイズよりも少し大きめです。 –

関連する問題