Как выполнить PHP паук / скребок, но без тайм-аута - PullRequest
0 голосов
/ 25 февраля 2009

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

Мне нужно очищать страницы для получения информации с различными интервалами, что означает вызов бота через эти интервалы, чтобы загрузить ссылку из базы данных и удалить страницу, на которую указывает ссылка.

Проблема заключается в загрузке бота. Если я загружу его с помощью javascript (например, Ajax-вызова), браузер выдаст сообщение об ошибке, говорящее о том, что страница слишком долго отвечает, и мне придется держать страницу открытой.

Если я сделаю это изнутри PHP, я мог бы, вероятно, увеличить время выполнения до необходимого времени, но тогда, если оно выдаст ошибку, у меня не будет доступа, чтобы убить процесс, и ничего не будет отображаться в браузере, пока выполнение PHP завершено верно?

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

Приветствия:)

Ответы [ 4 ]

2 голосов
/ 25 февраля 2009

Используйте set_time_limit() как таковое:

set_time_limit(0);
// Do Time Consuming Operations Here
1 голос
/ 25 февраля 2009

"в браузере ничего не отображается, пока не завершится выполнение PHP"

Вы можете использовать flush(), чтобы обойти это:

flush()

(PHP 4, PHP 5)

Сбрасывает выходные буферы PHP и все, что использует внутренний сервер PHP (CGI, веб-сервер и т.д.). Это эффективно пытается выдвинуть все выходные данные в браузер пользователя.

1 голос
/ 25 февраля 2009

посмотрите, как Sphider (поисковая система PHP) делает это.

Обычно вы просто обрабатываете часть нужных вам сайтов, делаете свое дело и переходите к следующему запросу, если есть набор параметров continue = true.

0 голосов
/ 25 февраля 2009

запустить через CRON и разбить паука на куски, так что он будет делать только несколько кусков одновременно. вызов из CRON с другими параметрами для обработки только нескольких фрагментов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...