Запуск обработки больших XML-файлов на PHP

104
14 октября 2021, 19:20

Имеется интернет-магазин, который парсит данные со склада.
Данные выгружаются в xml-файле размером примерно 50МБ в базу данных.

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

Вопрос заключается в самом инициировании парсинга - как это лучше всего реализовать?

Допустим, есть кнопка, нажали, запустился скрипт - а в этот момент что? Браузер будет ждать? - дак там лимит на 30 секунд и у каждого браузера разный.
Запустить фоново? Скажем, в скрипте будет ignore_user_abort(true) set_time_limit(0); открыть вкладку и сразу закрыть ее, а клиенту выдать сообщение что парсинг выполнится фоново? Я пробовал так делать, были подозрения, что скрипт выполнялся фоново, но все равно, не до конца.
Пробовал даже разбивать файлы на части и после выполнения каждой части делать редирект на этот же адрес, чтобы сбросить лимит браузера на ожидание! Но мне это все кажется такими костылями дикими что просто ужас!

Как обычно реализуются такие задачи?

Answer 1

Если по самому простому - сделать ajax запрос на сервер. Начать парсинг, предварительно сделав пометку (например в бд), что пошла обработка. Юзеру при след. нажатии на кнопку или когда он далее будет ходить по сайту писать что парсинг работает в фоне. Не допускать повторного запуска парсинга, пока не завершен предыдущий.

Второй вариант - запустить крон, который сканирует очередь задач из бд и парсит нужные файлы. Неплохой вариант для небольших задач.

Третий (на мой взгляд наиболее нормальный вариант). Запустить vps, установить сервер очередей (например Gearman). Запустить фоновый процесс (скрипт с бесконечным циклом) парсинга файлов из очереди. При нажатии юзером на кнопку, положить в очередь задач необходимые данные для парсинга (путь к файлу и т.д.). Фоновый скрипт будет доставать следующую задачу из очереди и парсить нужный файл.

READ ALSO
Json объекты в PHP

Json объекты в PHP

У менять есть такой json:

194
Запросы типа LIKE в библиотеке aura sql query

Запросы типа LIKE в библиотеке aura sql query

Ребята, кто-нибудь сталкивался с LIKE запросами в библиотеке aura/sqlquery? https://packagistorg/packages/aura/sqlquery

197
Yii2 Хлебные крошки полностью

Yii2 Хлебные крошки полностью

Вообщем народ у меня такая проблема с хлебными крошками на данный момент в товаре хлебные крошки, выглядят примерно так:

93
mysql вывести группируя по полю

mysql вывести группируя по полю

в таблице main есть записи,

49