Выборочное и построчное чтение большего файла на PHP


Появилась задача разобрать файл большого размера (более 10 гигабайт).
Поискав в сети, на одном из форумах нашелся хороший класс для помощи в реализации данной задачи.

class FileReader
{
   protected $handler = null;
   protected $fbuffer = array();

   public function __construct($filename)
   {
       if(!($this->handler = fopen($filename, "rb")))
       throw new Exception("Cannot open the file");
   }

   public function Read($count_line = 10)
   {
       if(!$this->handler)
            throw new Exception("Invalid file pointer");

       while(!feof($this->handler))
       {
            $this->fbuffer[] = fgets($this->handler);
            $count_line--;
            if($count_line == 0) break;
       }

       return $this->fbuffer;
    }

    public function SetOffset($line = 0)
    {
        if(!$this->handler)
            throw new Exception("Invalid file pointer");

        while(!feof($this->handler) && $line--) {
             fgets($this->handler);
        }
     }
}

Пример использования класса:

$stream = new FileReader($file_name);
$line = 200000; #Указываем с какой строки начинаем читать  
$count_line = 50; #Указываем сколько строк надо прочесть  
$stream->SetOffset($line);
$result = $stream->Read($count_line);

print_r("<pre>");
print_r($result);
print_r("</pre>");

Так поэтапно при помощи данного класса можно разобрать большой файл если у вас ограниченны ресурсы.

P.S Сохранил себе на память что бы долго не искать.

#php

Copyright © 2019