Провел небольшие исследования расставив в различных частях скрипта memory_get_usage.
Потребляемая память увеличивается непосредственно после создания объекта phpQuery из переменной $content , при этом память не уменьшается после вызова phpQuery::unloadDocuments(). Также, память накапливается не после каждого создания объекта phpQuery, а как-то периодически (один раз в несколько итераций, закономерность увеличения не удалось установить). К примеру: было 2097152 после стало 4194304, спустя несколько итераций значение не изменялось, но после снова увеличилось и стало 6291456.
Также хотелось бы добавить, что в некоторых случаях, память увеличивается не после создания объекта phpQuery, а после одного из циклов foreach (1-го либо 2-го сверху)
а возможно и где-то еще течет вне это ф-ции
выводи в консоль отладочную инфу https://www.php.net/manual/ru/fu...ry-get-usage.php
в начале ф-ции, вне ф-ции, перед и после unloadDocuments итд
может надебажишь что (Добавление)
я бы конечно вовнутрь полез и посмотрел что он там кэширует и как
в newDocument и unloadDocuments если выяснишь что именно он течет
В том что дело phpQuery используется только в этой функции и больше нигде.
Вот снова получил эту ошибку
PHP Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 1073741824 bytes) in C:\OSPanel\domains\home-page-parcer.ru\phpQuery.php on line 3494
Спасибо за совет с памятью. Буду пытаться отладить.
Есть функция, которая, используя библиотеку phpQuery, парсит данные со страницы на сайте. Данные на странице обновляются регулярно, поэтому функция вызывается в цикле приблизительно каждые 5-10 секунд (в зависимости от скорости получения страницы). После продолжительной работы скрипта (приблизительно 8-10 часов, при этом ~3-5 часов из этого времени ноутбук я не трогал), получаю ошибку (забыл ее скопировать с логов), что не хватает памяти для работы phpQuery. В php.ini memory_limit = 1536M. Скрипт работает на локальном сервере (OpenServer). В диспетчере задач объем памяти потребляемый Apache HTTP Server постоянно колеблется, к примеру: несколько минут назад (после небольшого простоя бездействия ноутбука было 170Мб), сейчас (спустя минут 10) - 60 Мб. Собственно сама функция. Не могу понять в чем проблема и почему phpQuery::unloadDocuments(); как-то избирательно очищает документы
Спасибо. Проблему устранил, все оказалось предельно банально. Для вывода использовал ранее написанную функцию, заменил ее на echo и получил нужную мне таблицу. Вот эта функция
При помощи phpQuery пытаюсь ее спарсить, но результат выводит всю страницу. Что делаю не так? Код ниже:
в переменной $url находится ссылка на страницу
также хочу добавить, что если вместо таблицы искать на этой странице текстовое поле по id тогда все работает нормально
строка которую необходимо спарсить представляет собой страницу сайта, она очень большая, а вот этот кусочек кода имеется в ней, для большего понимания публикую немного большую часть
Здравствуйте!
Задача следующая:
При помощи регулярного выражения необходимо найти и получить всю информацию (текст и ссылки - соответственно латинские и русские символы), которые находятся между двумя тегами </script> и <br>. Данная информация не находится ни в <div> ни в таблице, она просто выводится скриптом. На странице много тегов </script> и <br>, но всего лишь одна комбинация когда после </script> идут текст и ссылка, а после них тег <br>. Получить результат пытаюсь при помощи следующего кода, но получаю bool(false).
P.S. в переменной $url хранится адрес страницы, с которой пытаюсь спарсить инфо