За последние 24 часа нас посетили 62939 программистов и 1743 робота. Сейчас ищут 859 программистов ...

Загрузка csv в базу

Тема в разделе "PHP для новичков", создана пользователем kikosik, 9 июл 2017.

  1. kikosik

    kikosik Активный пользователь

    С нами с:
    13 апр 2017
    Сообщения:
    60
    Симпатии:
    0
    Здравствуйте, у меня такая проблема. Есть у меня csv файл, размер которого 70 мб и там 50000 строк.
    Нашел код для автоматической загрузки csv в таблицу в базе. После некоторых изменений код начал работать, но оно загружает примерно 60 строк из 50000, и больше не загружает. Пробовал все но не смог решить эту проблему.

    Кто не будь сможет мне в этом помочь? Я навичок

    Вот код

    PHP:
    1. <?php
    2. error_reporting(0); // Выключаем показ ошибок. Чтобы их видеть - вместо 0 поставьте E_ALL
    3. include('db_conn.php');
    4. $max_file_size = 70; // Максимальный размер файла в МегаБайтах
    5. if($_POST['update']=='OK'){
    6.     // СТАРТ Загрузка файла на сервер
    7.     if($_FILES["filename"]["size"] > $max_file_size*1024*1024){
    8.         echo 'Размер файла превышает '.$max_file_size.' Мб!';
    9.         include('form_file_load.php');
    10.         exit;
    11.     }
    12.     if(copy($_FILES["filename"]["tmp_name"],$path.$_FILES["filename"]["name"])){
    13.         echo("Добавление "."<b>".$_FILES["filename"]["name"]."</b>"." завершена!<br />");
    14.     }
    15.     else{
    16.         echo 'Սխալ է տեղի ունեցել<br>';
    17.         include('form_file_load.php');
    18.         exit;
    19.     }
    20.  
    21.  
    22.     $file = fopen('php://memory', 'w+');
    23.     fwrite($file, iconv('UTF-8', 'UTF-8', file_get_contents($_FILES["filename"]["name"])));
    24.     rewind($file);
    25.  
    26.     $r = 1;
    27.     while (($row = fgetcsv($file, 1000, "|")) != FALSE) {
    28.         $r++;
    29.         if($r == 1) {continue;} // Не дает записать в БД Заголовки Прайс-листа
    30.         $ins="INSERT INTO `table1` (`PLAYER`,`PICTURE`,`RUSMETA`,`ENGTITLE`,`ENGDESCRIPTION`,`GENRE`
    31.        )VALUES('$row[0]','$row[1]', '$row[2]', '$row[3]', '$row[4]', '$row[5]')";
    32.         $query = mysql_query($ins);
    33.         if(!$query) die('Սխալ!!!');
    34.     }
    35.     fclose($file);
    36.     echo 'Добавлен - '.$r;
    37.     header('Location: index.php');
    38.  
    39. }
    40. else{
    41.     include('form_file_load.php');
    42. }
    43. ?>
     
    #1 kikosik, 9 июл 2017
    Последнее редактирование модератором: 9 июл 2017
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    В причинах пробовали разобраться? Что в логах, есть ли ошибки?
    А вообще, большой объём лучше загружать пачками, по строк 400-500 одним запросом.
    Перед циклом выполните
    PHP:
    1. fgetcsv($file, 1000, "|");
    чтобы прочитать первую строку и не нужно будет постоянно проверять внутри цикла. И еще, хоть к теме не относится, но расширение mysql_* крайне не рекомендуется к использованию.
     
  3. kikosik

    kikosik Активный пользователь

    С нами с:
    13 апр 2017
    Сообщения:
    60
    Симпатии:
    0
    А это 1000 что означает?
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    По ходу, в вашем коде тоже это значение задано и там у вас вопросы не возникали. Читаем описание параметра length функии fgetcsv
     
  5. kikosik

    kikosik Активный пользователь

    С нами с:
    13 апр 2017
    Сообщения:
    60
    Симпатии:
    0
    Спасибо поличилось