4

私はこのファイル構造を持っています:

line1 (number or a a short string)
line2 (can be several MB of text)
;
line1
line2
;
line1
line2
;
...

合計ファイルサイズは 100MB を超えているため、1 行ずつ読み取るのはかなり遅くなります。各ブロックの「line1」のみを読み込み、「line2」はすべて読み飛ばしたい。または、行番号がわかっている行を読むだけです。PHPでそれを行う方法はありますか?行を読み取る標準的な方法は行をメモリに取り込みますが、この構造ではあまり効果的ではありません。

(データベース構造の方がはるかに優れた使用法であることはわかっていますが、これは私が本当に解決策を求めている研究ケースです。)

4

1 に答える 1

16

splfile オブジェクトの使用

  • すべての行を 1 つずつ読み取る必要はありません

  • 目的の行に「ジャンプ」できます

行番号がわかっている場合:

//lets say you need line 4
$myLine = 4 ; 
$file = new SplFileObject('bigFile.txt');
//this is zero based so need to subtract 1
$file->seek($myLine-1);
//now print the line
echo $file->current();

チェックアウト: http://www.php.net/manual/en/splfileobject.seek.php

于 2013-10-14T11:15:05.367 に答える