比較的小さなデータのチャンクでphpでファイルを読み取る最良の方法は何ですか?
たとえば、5MB を読み取り、そのメモリを解放して、別の 5MB を読み取ります。
巨大なファイルを読み取って CSV に変換する必要がある解析ツールを php で作成しています。
私の問題は、許可されているメモリ制限を常に超えていることであり、私の環境ではそれを増やすことはできません。
これは、ジョブを完了するコードの一部です。
$i = 0;
$fileName = "test.txt";
$file = fopen($fileName,'r');
while($i <= 2000) {
$line = fgets($file);
$streetsheet[$i] = preg_split('@\ @',$line,NULL, PREG_SPLIT_NO_EMPTY);
++$i;
}
fclose($file);
$fp = fopen('result.csv','w');
foreach($streetsheet as $key=>$value) {
fputcsv($fp, $value);
}
たとえば、上の抜粋では、ファイルの最初の 2000 行を読み取っていますが、問題なく動作しています。
条件を次のように変更すると問題が発生します
while(!feof($file)){\*....*\}
許可されたメモリ制限を超えたことがすぐにわかり、問題の原因となっている行は preg_split を使用している行であることがわかります。
それで、ファイルを読むための最良の方法は何だろうか...一度に1000行ですか?
ありがとう!
反対票を投じる場合は、少なくとも理由を説明する一般的な礼儀を持ってください