Помогите с прожорливой памятью

128
19 февраля 2019, 11:00

Люди добрые помогите решить проблему. Через библиотеку чтения Excel файлов считываю большой файл и память на сервере сжирает данный скрипт,как освобождать память при каждом цикле ? Ну или как решить по другому ???

    $excel = PHPExcel_IOFactory::load('test.csv');
    Foreach($excel ->getWorksheetIterator() as $worksheet) {
        $lists[] = $worksheet->toArray();
    }
foreach($lists as $list){
 echo '<table border="1">';
 // Перебор строк
 foreach($list as $row){
   echo '<tr>';
   // Перебор столбцов
   foreach($row as $col){
     echo '<td>'.$col.'</td>';
 }
 echo '</tr>';
 }
 echo '</table>';
}
Answer 1

Для обработки больших файлов (больше чем доступная память) нужно эти файлы не целиком считывать, а обрабатывать построчно:

if (($handle = fopen("test.csv", "r")) !== FALSE) {
    echo "<table>";
    while (($data = fgetcsv($handle, 1024, ",")) !== FALSE) {
        $num = count($data);
        echo "<tr>";
        for ($c=0; $c < $num; $c++) {
            echo "<td>" . $data[$c] . "</td>";
        }
        echo "</tr>";
    }
    echo "</table>";
    fclose($handle);
}

Более подробно смотрите на http://php.net/manual/ru/function.fgetcsv.php

Answer 2
$lines = file('test.csv'); //Читает содержимое файла и помещает его в массив
echo '<table border="1">';
foreach($lines as $line){
  $list = explode(";", $line); //Разбивает строку с помощью разделителя
  foreach($list as $row){
    echo '<tr>';
    // Перебор столбцов
    foreach($row as $col){
      echo '<td>'.$col.'</td>';
    }
    echo '</tr>';
  }
}
echo '</table>';

Такой код более читабельный. Подобное я использовал на csv файлах размером более 20мб.

READ ALSO
Как на Python записать массив в файл?

Как на Python записать массив в файл?

На PHP пишу так, все работает без проблем:

165
Как из масива вытащить нужное поле?

Как из масива вытащить нужное поле?

как из этого массива вытащить это поле [DecisionResult] ??

126
Упорядочить файлы по дате создания

Упорядочить файлы по дате создания

подскажите, как правильно заменить значение ключа на метку времени создания файла для сортировки?

194
Не могу запустить OpenServer [закрыт]

Не могу запустить OpenServer [закрыт]

OpenServer не запускается, пару минут назад работал, а сейчас нетВот лог Файл C:\Windows\system32\drivers\etc\hosts недоступен для записи

176