Ограничение на выполнение скрипта в 60 секунд, php.

Hixon10
На сайте с 21.08.2010
Offline
125
2579

Добрый день. Есть скрипт, который парсит 26 тыс. страниц. Время на выполнение скрипта - 60 секунд, изменить его никак нельзя (через саппорт - тоже). Скрипт сделан так, что выполняется цикл столько раз, сколько страниц, т.е. 26 тыс. раз. Как можно выполнить скрипт? Мне пока приходит в голову вариант, при котором мы будем разбивать цикл по 100-200 итераций руками, но сколько же тут будет ручной работы... Нет никакого другого способа выполнить скрипт?

set_time_limit(0); // не помогает
Веду свой невзрачный блог (http://hixon.ru/).
Дмитрий
На сайте с 23.08.2006
Offline
199
#1

Если парсить нужно не по крону, а из браузера - делать отдельную страничку, которая будет опрашивать этот скрипт аякс запросом.

В цикле опрашиваемого скрипта отслеживать сколько осталось до лимита. Если, скажем, 50 секунд - вернуть яваскрипту текущую позицию. А на страничке при получении ответа - вызывать новый запрос, в параметре передать текущую позицию.

Разрабатываю и автоматизирую на php http://jonnyb.ru/
gormarket
На сайте с 29.12.2010
Offline
47
#2

Приходилось сталкиваться с чем-то подобным.

Через браузер запускался PHP-скрипт на сайте, делающий множество небольших однотипных операций, суммарное время выполнения которых превышало десятки минут.

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

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

А после окончательного завершения PHP-скрипт отправлял в браузер javascript с сообщением о завершении работы.

Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
Hixon10
На сайте с 21.08.2010
Offline
125
#3
JonnyB:
Если парсить нужно не по крону, а из браузера - делать отдельную страничку, которая будет опрашивать этот скрипт аякс запросом.
В цикле опрашиваемого скрипта отслеживать сколько осталось до лимита. Если, скажем, 50 секунд - вернуть яваскрипту текущую позицию. А на страничке при получении ответа - вызывать новый запрос, в параметре передать текущую позицию.

Спасибо за ответ, так, наверное, и сделаю.

gormarket:
Приходилось сталкиваться с чем-то подобным.
Через браузер запускался PHP-скрипт на сайте, делающий множество небольших однотипных операций, суммарное время выполнения которых превышало десятки минут.
Решение было в том, что PHP-скрипт после каждой операции проверял время своей работы и если оно превышало некоторое значение (я задавал 10 секунд), отправлял в браузер javascript, отображающий линейку прогресса и выполняющий вызов того же PHP-скрипта с указанием точки остановки.
В результате каждый раз PHP-скрипт начинал на сайте работу не с начала, а с того места, на котором остановился.
А после окончательного завершения PHP-скрипт отправлял в браузер javascript с сообщением о завершении работы.

Угу, уже так и делаю. Скрипт выполняется в браузере, никаких линеек прогресса не нужно, т.к. вызывать скрипт буду я, но идею я понял, спасибо.

Измеряю время выполнения скрипта с помощью


$start_time = microtime(true);
$exec_time = microtime(true) - $start_time;

А как нужно останавливать скрипт? Через exit()? И потом передать в браузер текущую позицию?

rammlied
На сайте с 13.04.2011
Offline
56
#4

я делал цикл на количество операций примерно вкладывающихся в срок, а потом делал редирект на ту же страницу с другими параметрами.

script.php?i=1

делает 100 итераций и вызывает

script.php?i=101

как то так.

делаю СДЛы, получаются ГСы )
Дмитрий
На сайте с 23.08.2006
Offline
199
#5

Hixon10, лучше сначала передать в браузер текущую позицию, а затем exit; :)

Hixon10
На сайте с 21.08.2010
Offline
125
#6
JonnyB:
Hixon10, лучше сначала передать в браузер текущую позицию, а затем exit; :)

Это понятно :)

rammlied:
я делал цикл на количество операций примерно вкладывающихся в срок, а потом делал редирект на ту же страницу с другими параметрами.
script.php?i=1
делает 100 итераций и вызывает
script.php?i=101
как то так.

Спасибо за мнение.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий