Как я могу получить бесконечное максимальное время выполнения с 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