Прочитайте файл в «кусках» с помощью PHP

Каков наилучший способ прочитать файл в php относительно небольшими фрагментами данных?

Например, прочитайте 5 МБ, а затем освободите эту память и прочитайте еще 5 МБ

Я пишу инструмент разбора в php, который должен прочитать HUGE-файл и преобразовать его в CSV.

Моя проблема заключается в том, что я постоянно превысил допустимый предел памяти, а повышение в моей среде не является вариантом.

Это часть кода, который выполняет свою работу:

$i = 0; $fileName = "test.txt"; $file = fopen($fileName,'r'); while($i <= 2000) { $line = fgets($file); $streetsheet[$i] = preg_split('@\ @',$line,NULL, PREG_SPLIT_NO_EMPTY); ++$i; } fclose($file); $fp = fopen('result.csv','w'); foreach($streetsheet as $key=>$value) { fputcsv($fp, $value); } 

Например, в отломе, показанном выше, я читаю первые 2000 строк файла, и он работает отлично.

Проблема возникает, когда я меняю условие на

while(!feof($file)){\*....*\}

Он сразу сообщает мне, что я превысил допустимый предел памяти, а затем он сообщает мне, что строка, вызывающая проблему, является той, где я использую preg_split.

Так что мне интересно, что лучший способ прочитать файл сказать … 1000 строк за раз?

Благодаря!

Если вы собираетесь с понижением, по крайней мере, иметь общую любезность, чтобы объяснить, почему

Related of "Прочитайте файл в «кусках» с помощью PHP"

Вы уже читаете его в «частях»: вы читаете его по очереди. Проблема в том, что вы вставляете все строки в массив и затем сбрасываете массив.

Вместо этого прочитайте строку и выведите строку и полностью пропустите массив:

 $fileName = "test.txt"; $file = fopen($fileName,'r'); $fp = fopen('result.csv','w'); while(!feof($file)) { $line = fgets($file); $value = preg_split('@\ @',$line,NULL, PREG_SPLIT_NO_EMPTY); fputcsv($fp, $value); } fclose($file); fclose($fp);