К основному контенту

Немного программизма: PHP и файлы CSV

Пришлось тут решать одну небольшую задачу, переносить номенклатуру товаров в несколько баз данных, а именно добавлять сразу много (порядка 100 тыс. позиций) в магазин, построенный на Bitrix и в магазин, построенный на Script-Shop.

Для начала, чтоб не делать одну работу дважды, организовал некую базу, из которой решил сделать экспорт в форматы для каждой из систем.

Ну, про ограничение в 65535 строк в одном листе Microsoft Excel я заранее был в курсе, неожиданностью для меня это не стало.

Максимально увеличил в php параметр выполнения скрипта, чтобы браузер не отваливался по таймауту и, совершенно неожиданно, наступил на интересные детские грабли. Каждый раз при выполнении функции fgetcsv запрашивается новый кусок памяти, причем использовать предыдущий совершенно невозможно. Т.е. в зависимости от настроек сервера и PHP, скрипт по импорту падает из-за нехватки памяти после обработки 10 или 20 тыс. строк.

Дальнейший тюнинг параметров PHP в плане увеличения доступной скрипту памяти оказался не очень эффективным, объем информациив дальнейшем может только возрастать. После консультаций на форуме PHPClub'а пришлось-таки переписать скрипт импорта.

Теперь в цикле отслеживается объем памяти, как только свободной остается совсем мало, скрипт перезапускается, в параметре ему передается номер строки, на который произошел останов... Заодно удалось избавиться от шаманства с max_execution_time и присобачить забавный индикатор выполнения (стащил, кстати, с blogspot :) ).

Что делать с частями кода у Bitrix и Shop-Script, которые будут получать на вход похожие объемы данных не смотрел еще пока.

У Bitrix попроще в смысле, что скрипт, отвечающий за импорт, может запускаться по cron'у, т.е. переделки там будут, но минимальные. Напишу на bash оболочку какую-нибудь и придумаю какой-нибудь флаг. А вот Shop-Script'у придется такую же вещь, наверное, изготовить самостоятельно - никаких заданий по cron'у у него не предусмотрено :(

В принципе, еще надо аналогичную штуку для Joomla/VirtueMart, но там в и в коде сам черт ногу сломит. Подождем более приличных версий.

CommerceML: жаль, только двое из этих трех скриптов понимают, да и спецификация этого CML недавно слегка поменялась. Можно было бы по-модному обмен данными организовать. Да и объем передаваемых данных при использовании любого xML явно будет больше, чем при использовании CSV. А оно и в настоящем виде более 6M получается.

Что-то под утро посты какие-то сумбурные, блин.

Популярные сообщения из этого блога

Sitemap для Shop-Script

С недавних пор наш национальный поисковик присоединился к славной компании поисковиков, умеющих обрабатывать файлы sitemap . Наверное, это связано с какими-то общеланетарными амбициями. Как бы то ни было, теперь есть возможность скормить Яндексу файл(ы) sitemap . Я решил, что обрабатывать сайт какой-нибудь сторонней приблудой много дольше, чем просто сгенерировать файлы sitemap с помощью скрипта. Тем более, что у shop-script в общем-то довольно простая структура. Новая версия Shop-Script с ЧПУ пока недоступна, получу — модифицирую скрипт. :-) Скрипт простенький, делает sitemap для aux-страниц — это у shop-script так называются обычные статические html страницы; страниц с категориями. Без разбивки на страницы 1, 2 и т.д. на мой взгляд эти страницы не слишком важны страниц с товарами и обсуждениями товаров Можно запускать из браузера, можно по cron’у. Корневую страницу сайта, страницу с новостями, страницу с формой обратной связи и т.п. надо записать в отдельный файл sitemap ...

Набережные

На бывшей доске почета, а ныне просто небольшой фотовыставке достижений Московского Судостроительного и Судоремонтного Завода (МССЗ) увидел пару интересных фотографий продукции этого завода на фоне набережных Москвы. Вот только сами набережные и годы съемки определить не смог. :) Знатоки подсказывают: первая фотография: Гончарная набережная у м.Таганская ; вторая: Фрунзенская набережная дом 34-32-26 .

Зеленые облака

Сегодня часов около 12 дня бежал по делам рядом со станцией метро Юго-Западная и обратил внимание на странный цвет неба. Поскольку прямо по курсу, километрах в трех-четырех находится железнодорожная станция "Очаково", решил, что там авария какая-нибудь. "Хлор или иприт" - внезапно промелькнула мысль. Странно, уроки НВП я, большей частью, прогуливал... Позже в Интернете прочел, что это сильный ветер поднял в воздух большое количество пыльцы. Сделал фотографию на планшет, убедился, что получилось плохо - цвета почти видно, и, так как торопился, не стал дальше заморачиваться. Вот сейчас еду в метро домой, попробовал немного задрать контраст и насыщенность. Может, получится чего.