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

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

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

5 ответов

Решение

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

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

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


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

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

Вы должны рассмотреть возможность использования очереди заданий и рабочей реализации. Я бы порекомендовал Gearman или Zeromq. У обоих из них есть нативные php-привязки.

Использование set_time_limit(0), Смотрите руководство по PHP для более подробного объяснения.

секунд

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

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

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

http://php.net/manual/en/info.configuration.php

max_execution_time = 0

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

но для этого выпуска curl лучше, чем file_get_html

Другие вопросы по тегам