Изменилось ли содержимое файла? Если он статический или относительно статический, вы можете создать список смещений, в которых вы хотите прочитать свои данные. Например, если файл изменяется один раз в год, но вы читаете его сотни раз в день, тогда вы можете предварительно вычислить смещения нужных строк и перейти к ним напрямую, например:
$offsets = array();
while ($line = fread($filehandle)) { .... find line 10 .... }
$offsets[10] = ftell($filehandle); // store line 10's location
.... find next line
$offsets[20] = ftell($filehandle);
и так далее. После этого вы можете легко перейти к расположению этой линии следующим образом:
$fh = fopen('file.txt', 'rb');
fseek($fh, $offsets[20]); // jump to line 20
Но это может быть излишним. Попробуйте сравнительный анализ операций - сравните, сколько времени занимает старомодное «чтение 20 строк» с предварительным вычислением / переходом.