Я исследовал весь интернет, чтобы найти решение; но все они пренебрегают важной проблемой. Лучшее решение было в переполнении стека:
$file = new SplFileObject('longFile.txt');
$fileIterator = new LimitIterator($file, 1000, 2000);
foreach($fileIterator as $line) {
echo $line, PHP_EOL;
}
Но, как и в случае других подходов, для начала необходимо выполнить чтение с начала файла, чтобы достичь линии смещения. Обычно это незначительно; но для больших файлов (скажем, миллионов строк) это значительно замедляет процесс. Время монотонно увеличивается с увеличением смещения. Если вы установите смещение в миллионы, время обработки составит несколько секунд.
В базах данных (например, mysql) мы индексируем таблицу, чтобы прочитать строку, не просматривая всю базу данных. Есть ли сделать это с ключом файла (номер строки)? Интересно, как базы данных плоских файлов, такие как SQLite и Berkeley DB, индексируют свои таблицы.