解決策を見つけるためにインターネット全体を調べました。しかし、それらはすべて重要な問題を無視しています。最良の解決策は、スタックオーバーフローにありました
$file = new SplFileObject('longFile.txt');
$fileIterator = new LimitIterator($file, 1000, 2000);
foreach($fileIterator as $line) {
echo $line, PHP_EOL;
}
ただし、他のアプローチと同様に、これはオフセット行に到達するためにファイルの先頭から読み取る必要があります。通常、それは無視できます。ただし、大きなファイル (数百万行など) の場合、これによりプロセスが大幅に遅くなります。時間は、オフセットの増加によって単調に増加します。オフセットを数百万にすると、処理時間は数秒になります。
データベース (mysql など) では、テーブルにインデックスを付けて、データベース全体を調べずに行を読み取ります。ファイルキー(行番号)でそのようなことをすることはありますか?SQLite や Berkeley DB などのフラット ファイル データベースは、どのようにテーブルにインデックスを付けているのだろうか。