Приветствую, подскажите пожалуйста куда копать. Есть скрипт который парсит xml, то есть я могу указать ссылки допустим на 5 xml файлов. Через foreach и метод simplexml_load_file мы парсим по очереди и заносим в БД. При долгой обработке выдает mysql error while sending query ID= Как реализовать долгое выполнение чтобы не было ошибки и все норм обработалось?
PHP: foreach ($catalogLists as $item) { $xml = simplexml_load_file($item['url']);//получаем ссылку с БД //парсим продукцию foreach ($xml->shop->offers->offer as $offer) { $this->addProducts($offer, $xml->shop->name); // добавляем информацию в БД } } Может крон, просто я не знаю куда копать вообще в таком случае?
Скорее всего у вас слишком часто идут запросы в бд и она затыкается. Сделай добавление не по 1 записи, а например по 100 в одном запросе. То есть внутри общего цикла запускаете ещё цикл для накопления в массив 100 элементов, и создайте метод добавления записей из массива - например через implode. Тогда у вас будет в 100 раз реже обращение к бд
Ну либо сделай цикл с лимитом тоисть по 200 строк обрабатывай зараз. Потом обновляй страницу на js с параметром лимита и номером файла. и продолжай парсить. Когда мне приходится записывать большие данные в БД я так и делаю разбиваю на части тогда ты и не вылетишь лимит времени ожидания браузером
@Dron-Boy, а чё тут обосновывать? зачем тащить JS туда где ему совсем не место. Это примерно как в анекдоте "Хорошая машина КАМАЗ, но собаки быстро устают". Ты же когда идёшь в магазин расположенный в соседнем подъезде твоего дома, ты же просто выходишь из дома и идёшь напрямую в магазин. Тебе же не приходит в голову, что бы уехать в другой город, там сесть на автобус который довезёт тебя до магазина в твоём же доме.
js я использую для того что бы сделать редирект на эту же страницу с параметрами + делаю settimeout на этот редирект, если его делать на php то он происходит сразу и браузер считает это все одним запросом и браузер и время ожидания ответа сервера сбрасываться не будет. Я это тестировал. P.S. Если ты меня поправишь я не против, могу конечно чего то не знать.
Есть плюс - можно показывать индикацию процесса обработки Есть минус - если закрыл или перешёл на другую страницу, процесс закончится