Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Обработка xlsx прайса

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Не хватает памяти
kapUstin
Отправлено: 30 Марта, 2015 - 16:14:32
Post Id


Новичок


Покинул форум
Сообщений всего: 34
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




Есть прайс в экселе на 680000 строк (35Мб), необходимо в этом прайсе выбрать товары определенного производителя и определенным образом их преобразовать.
Попробовал сделать все это с помощью PHPExcel. Когда строк немного, то работает все нормально, но если грузить файл полный, со всеми строками, то на сервере не хватает памяти (memory_limit 128M) для выполнения скрипта, даже без необходимых преобразований. Пробовал увеличивать лимит до 1024M, выдает 500 ошибку.
Подскажите, что не так делаю, я в этих делах нуб. Может вообще не через PHPExcel делать надо, или можно сделать как-то по частям?

(Отредактировано автором: 30 Марта, 2015 - 16:38:47)

 
 Top
Faraon-san
Отправлено: 30 Марта, 2015 - 23:56:19
Post Id



Посетитель


Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013  


Помог: 8 раз(а)




Какой результат ты хочешь получить?
Не проще ли запихнуть файл в базу данных и там уже сортировать и преобразовывать как тебе надо?
 
 Top
kapUstin
Отправлено: 31 Марта, 2015 - 11:45:18
Post Id


Новичок


Покинул форум
Сообщений всего: 34
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




как его запихнуть в базу лучше?
 
 Top
Faraon-san
Отправлено: 31 Марта, 2015 - 11:58:27
Post Id



Посетитель


Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013  


Помог: 8 раз(а)




Самый простой вариант это сохранить Excel в текстовом формате с разделителем табуляция, а скриптом считывать одну строку, разбивать ее и вставлять в базу данных.
Другой вариант это на локальном компьютере распарсить этот файл "PHPExcel" (тут ограничения памяти сам выставляешь), вставляешь в базу данных и phpmyadmin делаешь экспорт таблице, а на сервере импортируешь.

Тут как ни крути данных очень много, в массив это все не запихнешь, 1 гига памяти даже не хватит.

(Отредактировано автором: 31 Марта, 2015 - 12:02:05)

 
 Top
kapUstin
Отправлено: 31 Марта, 2015 - 12:15:13
Post Id


Новичок


Покинул форум
Сообщений всего: 34
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




нужна автоматизация процесса, без ручной закачки и разбора.
Прайс в xlsx приходит на почту от поставщика, нужно вычленить отдельные позиции и поменять артикулы и названия... По окончанию, должен получиться файл одного из форматов xlsx, csv, txt. Для небольших прайсов до 15000 строк PHPExcel подходит нормально, но в данном случае очень много строк. Сейчас подумал распаковать исходный файл и спарсить в базу xml-ку.
 
 Top
Dastor
Отправлено: 31 Марта, 2015 - 12:43:06
Post Id


Гость


Покинул форум
Сообщений всего: 66
Дата рег-ции: Окт. 2014  


Помог: 3 раз(а)




Берем любую утилиту для парсинга xlsx->csv.
Например, такую https://github[dot]com/dilshod/xlsx2csv (с xls не умеет работать).
На больших объемах работает достаточно шустро.
На выходе получаем csv-файл.

Загружаем этот файл в mysql с помощью load data local infile (очень быстро загружает данные).
И уже работаем с таблицей в бд, если нужны преобразования.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB