Пока что запускал скрипт с домашней машины на денвере, потому что там можно снять ограничение на время работы скрипта. Но этот вариант меня не устраивает. Также есть площадка в интернете, где сейчас пишется сайт. Но на ней все упирается в ограничение времени на работу скрипта, ведь доступа к настройке max_execution_time нет.
Подскажите, пожалуйста, есть ли какие-нибудь способы запустить скрипт на площадке, чтобы он выполнялся (как cron, например), но не ограничивался по времени выполнения?
Спустя 1 час, 7 минут, 42 секунды (12.10.2010 - 01:47) FatCat написал(а):
Запускашь в браузере. Отпарсил страницу, записал данные и состояние в базу или в файл, и завершился... выдачей в браузер тега мета-рефреша.
Я таким методом пользуюсь для обработки очень больших баз, когда памяти на проход всей таблицы в один цикл не хватает.
Я таким методом пользуюсь для обработки очень больших баз, когда памяти на проход всей таблицы в один цикл не хватает.
if(!isset($_POST['start']))$_POST['start'] = 0;
$rn = 500;
$rz = 0;
$uno_query = $DB->query("SELECT * FROM table WHERE $where LIMIT ".intval($_POST['start']).",".$rn);
while($urow = $DB->fetch_row($uno_query))
{
$rz++;
// Обрабатываем $rn строк
}
if($rz<$rn)
{
echo '<h4 align="center">Выполнено!</h4>';
}
else
{
echo '<h4 align="center"><a href="index.php">Остановить</a>!</h4><br>
<h4 align="center"><a href="index.php?cmd=made_update&start='.($rz+$_POST['start']).'">Следующие '.$rz.' строк</a>!</h4>
<meta http-equiv="Refresh" Content="10; URL=index.php?cmd=made_update&start='.($rz+$_POST['start']).'">';
}
Спустя 3 часа, 15 минут, 6 секунд (12.10.2010 - 05:03) arvitaly написал(а):
Цитата |
Я таким методом пользуюсь для обработки очень больших баз, когда памяти на проход всей таблицы в один цикл не хватает. |
Это браузер должен быть открыт и одноразовый прогон. Если оба условия в силе, то можно и так.
Gilean,
Любой недельный прогон можно разделить на части и еще на части.
В итоге у нас хоть 1000 cron-записей с запуском хоть раз в минуту - которые делают все вместе вашу задачу. Есть некоторые моменты с синхронизацией - но это решаемые технические проблемы.
Спустя 4 часа, 15 минут, 19 секунд (12.10.2010 - 09:18) sergeiss написал(а):
Цитата (Gilean @ 12.10.2010 - 01:40) |
Но на ней все упирается в ограничение времени на работу скрипта, ведь доступа к настройке max_execution_time нет. |
А set_time_limit чем не устраивает?
Спустя 7 минут, 35 секунд (12.10.2010 - 09:25) arvitaly написал(а):
Цитата |
А set_time_limit чем не устраивает? |
У него нельзя скорее всего
Цитата |
set_time_limit() has no effect when PHP is running in безопасный режим. There is no workaround other than turning off safe mode or changing the time limit in the php.ini. |
Спустя 13 минут, 2 секунды (12.10.2010 - 09:38) twin написал(а):
Цитата |
А set_time_limit чем не устраивает? |
На неделю? А как же ребуты?
Спустя 1 час, 23 минуты, 34 секунды (12.10.2010 - 11:02) Basili4 написал(а):
Задачу бить на этапы и в крон.
Спустя 21 минута, 31 секунда (12.10.2010 - 11:24) Gilean написал(а):
Цитата | ||
У него нельзя скорее всего |
Да, к сожалению, на хостинге это не прокатывает.
Спустя 15 минут, 44 секунды (12.10.2010 - 11:39) Gilean написал(а):
Цитата |
Задачу бить на этапы и в крон. |
Вы имеете ввиду бить задачу на этапы до такой степени, чтобы они успевали отрабатывать в кроне, и он не завершался принудительно из-за превышения времени выполнения?
Спустя 9 минут, 41 секунда (12.10.2010 - 11:49) arvitaly написал(а):
Цитата |
Вы имеете ввиду бить задачу на этапы до такой степени, чтобы они успевали отрабатывать в кроне, и он не завершался принудительно из-за превышения времени выполнения? |
Я бы сказал даже намного меньше чем максимальное время отработки, а вообще вы бы сказали, что делаете - может быть советы бы были поконкретнее
Спустя 15 минут, 52 секунды (12.10.2010 - 12:05) Gilean написал(а):
Мне необходимо распарсить все категории по этой ссылке. Т.е. заходишь в каждую категорию, собираешь информацию с ссылок на сайты (их там по 20 штук на странице, они еще пронумерованы), затем заходишь в каждую подкатегорию, обрабатываешь урлы там, и переходишь в подкатегории подкатегорий. И так до упора.
Пример
Здесь я должен буду взять информацию со страниц, на которые ведут ссылки Facebook, YouTube - Broadcast yourself, The Internet Movie Database и т.д.
Затем перейти в подкатегории в Sub-Categories и сделать тоже самое там.
Related Categories трогать не нужно.
В парсере используется рекурсивная функция, которая принимает категорию, обрабатывает в ней ссылки и запускает саму себя для подкатегорий.
Пример
Здесь я должен буду взять информацию со страниц, на которые ведут ссылки Facebook, YouTube - Broadcast yourself, The Internet Movie Database и т.д.
Затем перейти в подкатегории в Sub-Categories и сделать тоже самое там.
Related Categories трогать не нужно.
В парсере используется рекурсивная функция, которая принимает категорию, обрабатывает в ней ссылки и запускает саму себя для подкатегорий.
Спустя 7 минут, 42 секунды (12.10.2010 - 12:13) arvitaly написал(а):
Ну в принципе все просто. Получаем список категорий - думаю для этого хватит одного прохода скрипта.
Далее получаем все категории данной категории - сколько успеваем. Следущий запуск - если не успели отработать все категории (для этого где-то стоит флаг) доотрабатываем.
Дальше по аналогии - все все все подкатегории.
Дальше отрабатываем каждую категорию по тому же принципе - есть список всех страниц и количество уже отработанных.
Флаг отработанности естественно ставим после отработки страницы, поэтому даже если скрипт закончится когда страница еще будет на середине загрузки - просто в след запуск она запустится еще раз.
Далее получаем все категории данной категории - сколько успеваем. Следущий запуск - если не успели отработать все категории (для этого где-то стоит флаг) доотрабатываем.
Дальше по аналогии - все все все подкатегории.
Дальше отрабатываем каждую категорию по тому же принципе - есть список всех страниц и количество уже отработанных.
Флаг отработанности естественно ставим после отработки страницы, поэтому даже если скрипт закончится когда страница еще будет на середине загрузки - просто в след запуск она запустится еще раз.
Спустя 23 минуты, 19 секунд (12.10.2010 - 12:36) Gilean написал(а):
Цитата |
Ну в принципе все просто. Получаем список категорий - думаю для этого хватит одного прохода скрипта. Далее получаем все категории данной категории - сколько успеваем. Следущий запуск - если не успели отработать все категории (для этого где-то стоит флаг) доотрабатываем. Дальше по аналогии - все все все подкатегории. Дальше отрабатываем каждую категорию по тому же принципе - есть список всех страниц и количество уже отработанных. Флаг отработанности естественно ставим после отработки страницы, поэтому даже если скрипт закончится когда страница еще будет на середине загрузки - просто в след запуск она запустится еще раз. |
Спасибо большое, очень дельный совет. Приму к сведению.
Кстати, основная проблема сайта, с которого идет парсинг - долгий отклик.
ping alexa.com в командной строке говорит о 4 превышениях времени ожидания