Файлы - это просто поток данных, прочитанный от начала до конца. ОС запомнит позицию, которую вы прочитали в этом файле. При необходимости сделать это в приложении также довольно просто. ОС заботится только о байтовых позициях, а не о строках.
Только представьте, что вы разыгрываете колоду из 52 карт последовательно. Вы вручаете первую карту. В следующий раз 2. карта. Если вы хотите выдать 3. карту, вам не нужно начинать отсчет с самого начала или даже вспоминать, где вы были, вы просто раздаете следующую доступную карту, и это будет третья.
Это может быть немного больше работы, необходимой для чтения строк, так как вы хотите буферизовать данные, считанные из фактического файла, для удобства, но это не намного больше, чем запись смещения последнего фрагмента данных, которые вы раздавали, найдите следующий символ новой строки и передайте все данные между этими двумя точками.
PHP и ОС не нуждаются в сохранении номера строки, поскольку вся система заботится о «следующей строке». Если вы хотите узнать номер строки, вы сохраняете счетчик и увеличиваете его каждый раз, когда ваше приложение читает строку.
$lineno=0;
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
lineno++; // keep track of the line number
...
}