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

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

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

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

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

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


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

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

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

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

секунд

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

EDIT: Что касается вашего второго вопроса, это вряд ли, вы должны проверить условия использования хостинга, чтобы узнать, разрешено ли это.

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

но для этого лотка для коррекции значение beter, чем file_get_html

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

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

 max_execution_time = 0