Как записать данные из csv файла в базу данных?

имеется csv файл, в котором более 40000 строк, нужно построчно в базу записать все эти данные. Пробовал и так и сяк, голову сломал, не хватает памяти. Последний рабочий вариант выглядит вот так, дальше переменная перебирается и записывается, не знаю, как улучшить скрипт. На маленьких файлах работает отлично, казалось бы. Может есть способ порционно брать данные и записывать?

<?php
 header('Content-type: text/html; charset=utf-8');
 ini_set("max_execution_time", 0);
 $file = $_POST['file'];
 $csv_lines  = file("2019-10-09_rivegauche.csv");

 if(is_array($csv_lines))
 {
  $cnt = count($csv_lines);
  for($i = 0; $i < $cnt; $i++)
   {
    $line = $csv_lines[$i];
    $line = trim($line);
    $first_char = true;
    $col_num = 0;
    $length = strlen($line);
     for($b = 0; $b < $length; $b++)
     {
      if($skip_char != true)
      {
       $process = true;
        if($first_char == true)
        {
         if($line[$b] == '"')
         {
          $terminator = '";';
          $process = false;
         }
         else
          $terminator = ';';
          $first_char = false;
         }

      if($line[$b] == '"')
      {
        $next_char = $line[$b + 1];

        if($next_char == '"')
          $skip_char = true;

        elseif($next_char == ';')
        {
          if($terminator == '";')
          {
            $first_char = true;
            $process = false;
            $skip_char = true;
          }
        }
      }

      if($process == true)
      {
        if($line[$b] == ';')
        {
           if($terminator == ';')
           {

              $first_char = true;
              $process = false;
           }
        }
      }

      if($process == true)
        $column .= $line[$b];

      if($b == ($length - 1))
      {
        $first_char = true;
      }

      if($first_char == true)
      {

        $values[$i][$col_num] = $column;
        $column = '';
        $col_num++;
      }
    }
    else
      $skip_char = false;
  }
}
}
 print_r($values);

?>

Ответы (0 шт):