Форумы портала PHP.SU » PHP » Программирование на PHP » Загрузка csv файла в базу данных

Страниц (1): [1]
 

1. kikosik666 - 09 Июля, 2017 - 18:47:10 - перейти к сообщению
Здравствуйте, у меня такая проблема. Есть у меня csv файл, размер которого 70 мб и там 50000 строк.
Нашел код для автоматической загрузки csv в таблицу в базе. После некоторых изменений код начал работать, но оно загружает примерно 60 строк из 50000, и больше не загружает. Пробовал все но не смог решить эту проблему.

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

Вот код

<?php
error_reporting(0); // Выключаем показ ошибок. Чтобы их видеть - вместо 0 поставьте E_ALL
include('db_conn.php');
$max_file_size = 70; // Максимальный размер файла в МегаБайтах
if($_POST['update']=='OK'){
// СТАРТ Загрузка файла на сервер
if($_FILES["filename"]["size"] > $max_file_size*1024*1024){
echo 'Размер файла превышает '.$max_file_size.' Мб!';
include('form_file_load.php');
exit;
}
if(copy($_FILES["filename"]["tmp_name"],$path.$_FILES["filename"]["name"])){
echo("Добавление "."<b>".$_FILES["filename"]["name"]."</b>"." завершена!<br />");
}
else{
echo 'Սխալ է տեղի ունեցել<br>';
include('form_file_load.php');
exit;
}


$file = fopen('php://memory', 'w+');
fwrite($file, iconv('UTF-8', 'UTF-8', file_get_contents($_FILES["filename"]["name"])));
rewind($file);

$r = 1;
while (($row = fgetcsv($file, 1000, "|")) != FALSE) {
$r++;
if($r == 1) {continue;} // Не дает записать в БД Заголовки Прайс-листа
$ins="INSERT INTO `table1` (`PLAYER`,`PICTURE`,`RUSMETA`,`ENGTITLE`,`ENGDESCRIPTION`,`GENRE`
)VALUES('$row[0]','$row[1]', '$row[2]', '$row[3]', '$row[4]', '$row[5]')";
$query = mysql_query($ins);
if(!$query) die('Սխալ!!!');
}
fclose($file);
echo 'Добавлен - '.$r;
header('Location: index.php');

}
else{
include('form_file_load.php');
}
?>
2. andrewkard - 09 Июля, 2017 - 20:57:17 - перейти к сообщению
Вы проводите лишние операции, файл прилетает в $_FILES, вот с ним и работайте
PHP:
скопировать код в буфер обмена
  1.  
  2.     foreach($_FILES as $name => $file){
  3.         if(!empty($file['tmp_name'])){
  4.             if (($handle = fopen($file['tmp_name'], "r")) !== FALSE) {
  5.                 while (($data = fgetcsv($handle, 5000, ",")) !== FALSE) {
  6.                
  7.                 //Обработка
  8.  
  9.                 }
  10.              }
  11.          }
  12.      }
  13.  
  14.  
  15.  
3. kikosik666 - 09 Июля, 2017 - 21:15:54 - перейти к сообщению
andrewkard пишет:
Вы проводите лишние операции, файл прилетает в $_FILES, вот с ним и работайте
PHP:
скопировать код в буфер обмена
  1.  
  2.     foreach($_FILES as $name => $file){
  3.         if(!empty($file['tmp_name'])){
  4.             if (($handle = fopen($file['tmp_name'], "r")) !== FALSE) {
  5.                 while (($data = fgetcsv($handle, 5000, ",")) !== FALSE) {
  6.                
  7.                 //Обработка
  8.  
  9.                 }
  10.              }
  11.          }
  12.      }
  13.  
  14.  
  15.  


fgetcsv($handle, 5000, ","

5000 что означает?
4. andrewkard - 09 Июля, 2017 - 21:35:42 - перейти к сообщению
Цитата:

array fgetcsv ( resource handle [, int length [, string delimiter [, string enclosure]]] )

length (Необязательный)

Должен быть больше самой длинной строки (в символах), найденной в CSV-файле (включая завершающий символ конца строки). Он стал необязательным в PHP 5. Если этот аргумент не указан (или равен 0 в версиях PHP 5.0.4 и выше), максимальная длинна строки не ограничена, но функция работает немного медленнее.
5. kikosik666 - 09 Июля, 2017 - 21:53:27 - перейти к сообщению
Спасибо поличилось

 

Powered by ExBB FM 1.0 RC1