Как я могу получить бесконечное максимальное время выполнения с PHP?

У меня есть сайт с 2000 страницами, и я хочу перебирать каждую страницу для создания файла Sitemap, используя функцию file_get_html() и регулярные выражения.

Очевидно, что это невозможно завершить в одном исполнении на стороне сервера, так как оно закончится из-за максимального времени выполнения. Я предполагаю, что ему нужно выполнить меньшие действия, сохранить прогресс в базе данных и затем поставить в очередь следующую задачу. Любые предложения?

Ответ 1

При запуске командной строки максимальное время выполнения не будет.

Вы также можете использовать set_time_limit(0); для этого, если ваш провайдер разрешает манипуляции.

Я не могу сказать, будет ли ваш ip-адрес заблокирован - так как это зависит от безопасности сервера, на который вы отправляете свои запросы.


Другое решение

Вы можете извлечь одну (или несколько) страницы и найти новые URL-адреса в исходном коде. Затем вы можете разместить их в базе данных. Затем в следующем прогоне вы обрабатываете очередь.

Ответ 2

Вам следует рассмотреть возможность использования очереди заданий и выполнения работника. Я бы рекомендовал Gearman или zeromq. Оба они имеют встроенные привязки php.

Ответ 3

Используйте set_time_limit(0). Подробнее см. В Руководство PHP.

секунд

Максимальное время выполнения, в секундах. Если установлено на ноль, не налагается лимит времени.

РЕДАКТИРОВАТЬ: Что касается вашего второго вопроса, это вряд ли, вы должны проверить условия использования хостинга, чтобы узнать, разрешено ли это.

Ответ 4

лучший способ для вас - использовать удаленный api. например, вы можете использовать import.io и получать параметры с каждой страницы с помощью json-формата. это способ получить свежую страницу при каждом вызове file_get_content или flie_get_html

но для этого параметра curl имеет значение beter than file_get_html

Ответ 5

Установите max_execution_time в 0 в php.ini. Это повлияет на каждый script, который вы запускаете на сервере, но если вы ищете исправление на уровне сервера, это сделает это.

http://php.net/manual/en/info.configuration.php#ini.max-execution-time

max_execution_time = 0