Невозможно прочитать данные из CSV с записями 80K - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь прочитать CSV с более чем 80K записей.К сожалению, я не могу этого добиться.Может кто-нибудь, пожалуйста, помогите мне?Мой CSV составляет около 100 МБ, и я увеличил memory_limit до 128M.

Я увеличил memory_limit до 128M.Я попытался использовать следующий код:

 $handle = fopen('products.csv');
  if ($handle !== FALSE) {
      $str ='';
      echo "IN";
      while (($data = fgetcsv($handle)) !== FALSE) {
        $str .= json_encode($data); // add each json string to a string variable, save later
        $array[]=$data;
      }
  }

  fclose($handle);
  $finalJsonString = json_encode($array);
  print_r($finalJsonString);

Output: null

Может кто-нибудь, пожалуйста, помогите мне, если у вас есть идеи по этому поводу?

Спасибо

1 Ответ

0 голосов
/ 29 марта 2019

Чтобы решить проблемы использования памяти с большими файлами, вы можете использовать генератор.

Генератор позволяет вам использовать foreach для итерации по набору данных без необходимости создания массива в памяти, что может привести к превышению лимита памяти или значительному времени обработки для генерации (источник: php.net генераторы ).

Это должно помочь вам на вашем пути:

<code>// the generator
function readCsv($csv)
{
    $handle = fopen($csv, "r");
    if ($handle) {
        while (!feof($handle)) {
            yield fgetcsv($handle);
        }
        fclose($handle);
    }
}

// initialize variables
$data = [];
$line = null;
$csv = "test.csv"; // change this to the csv-file you want to read
/* 
 * in the foreach do some logic
 * with the yielded csv content
 */
foreach(readCsv($csv) as $line) {
    // show for debug
    echo '<pre>';
    var_dump($line);
    echo '
'; } // показать использование памяти echo "Пиковое использование памяти (Кб):". memory_get_peak_usage () / 1024;
...