Чтение определенной строки файла в PHP

Я работаю над чтением файла в php. Мне нужно прочитать определенные строки файла.

Я использовал этот код:

fseek($file_handle,$start); while (!feof($file_handle)) { ///Get and read the line of the file pointed at. $line = fgets($file_handle); $lineArray .= $line."LINE_SEPARATOR"; processLine($lineArray, $linecount, $logger, $xmlReply); $counter++; } fclose($file_handle); 

Однако я понял, что fseek() принимает количество байтов, а не номер строки.

Есть ли у PHP другая функция, которая основывает свой указатель на номерах строк?

Или мне нужно каждый раз читать файл с самого начала и иметь счетчик, пока не будет прочитан мой номер нужной строки?

Я ищу эффективный алгоритм, перешагнув более 500-1000 Кбайт файлов, чтобы добраться до нужной строки, кажется неэффективным.

Использовать SplFileObject::seek

 $file = new SplFileObject('yourfile.txt'); $file->seek(123); // seek to line 124 (0-based) 

Это работает для вас?

 $file = "name-of-my-file.txt"; $lines = file( $file ); echo $lines[67]; // echos line 68 (lines numbers start at 0 (replace 68 with whatever)) 

Очевидно, вам нужно проверить, существуют ли строки перед печатью. Любой хороший?

Вы могли бы сделать так:

 $lines = file($filename); //file in to an array echo $lines[1]; //line 2 

ИЛИ

 $line = 0; $fh = fopen($myFile, 'r'); while (($buffer = fgets($fh)) !== FALSE) { if ($line == 1) { // $buffer is the second line. break; } $line++; } 

Вы должны прочитать с самого начала. Но если файл никогда / редко изменяется, вы можете кэшировать смещения строк где-то еще, возможно, в другом файле.

Попробуйте это, самый простой

 $buffer=explode("\n",file_get_contents("filename"));//Split data to array for each "\n" 

Теперь буфер представляет собой массив, и каждый индекс массива содержит каждую строку; Чтобы получить 5-ю строчку

 echo $buffer[4]; 

Вы можете использовать file($filename) функции file($filename) . Эта функция считывает данные из файла в массив.