Комментарии 5
а слово Bitrix как-нибудь убирается из ленты (1С тоже)?
А как вы парсили большую xmlну ? Не боитесь уйти в out of memory?
У нас на проекте, к счастью, нет необходимости загрузки крупных XML-файлов, но в моей практике приходилось работать с XML размером порядка 18 ГБ. Тогда мы реализовывали обработку, читая файл по частям — по несколько килобайт — и передавали эти участки событийно-ориентированному парсеру (SAX), что позволяло контролировать потребление памяти и избегать её переполнения.
Сейчас для таких задач, как правило, используют XMLReader — это встроенный в PHP потоковый парсер, который позволяет последовательно проходить по структуре XML-документа, извлекая нужные узлы без загрузки всего файла или даже всего дерева в память. Это эффективное и полностью безопасное с точки зрения ресурсов решение.
Ну будет ошибка в логах, в следующий раз просто добавят set_time_limit(99999); и ini_set('memory_limit', '9999999M');. Зачем очереди периозбретать и следить за потреблением ресурсов.
Подумаешь консистентность данных потеряется при падении скрипта из-за отсутствия транзакций.
P.S. FTP сервер - это сервер на котором включен протокол передачи данных FTP?
Нам пока не приходилось грузить в память многогигабайтные XML-файлы. Но даже если такая задача возникнет — её можно спокойно решить без снятия всех ограничений и "разгона" сервера до бесконечности.
В большинстве случаев файл можно обрабатывать последовательно, небольшими кусками, например, тем же XMLReader — он позволяет идти по структуре XML, не загружая всё сразу в память. То есть out of memory можно избежать просто за счёт корректного подхода, а не за счёт бесконечных set_time_limit и memory_limit.
Очереди, транзакции и прочая "тяжёлая артиллерия" хороши, но применяются по мере необходимости. Если интеграция простая, объём данных умеренный, а обработка не критична к времени — можно обойтись без сложной архитектуры. А если нужна транзакционность — она легко добавляется в нужных местах, без нагромождения изначально.
P.S. Да, FTP-сервер — это просто сервер, где запущен протокол FTP (File Transfer Protocol) для обмена файлами.
Простая интеграция в CMS Bitrix из XML-файла на FTP-сервере с использованием агентов