Появилась задача разобрать файл большого размера (более 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 Сохранил себе на память что бы долго не искать.