У меня есть эта файловая структура:
line1 (number or aa short string) line2 (can be several MB of text) ; line1 line2 ; line1 line2 ; ...
Общий размер файлов превышает 100 МБ, поэтому чтение строк за строкой каждый раз довольно медленно. Я хочу читать только «line1» каждого блока и пропустить все «line2». Или просто прочитайте строку, для которой я знаю полотно. Есть ли способ, которым я могу это сделать с помощью php? Стандартные методы чтения строк берут строки в память и не настолько эффективны с этой структурой.
(Я знаю, что структура базы данных будет намного лучше использовать, но это исследование, которое я действительно хочу получить.)
Использование splfileobject
нет необходимости читать все строки 1 на 1
может «прыгать» на нужную линию
В случае, если вы знаете номер строки:
//lets say you need line 4 $myLine = 4 ; $file = new SplFileObject('bigFile.txt'); //this is zero based so need to subtract 1 $file->seek($myLine-1); //now print the line echo $file->current();
проверить: http://www.php.net/manual/en/splfileobject.seek.php