Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Времени лимит


Автор: YahоО 20.3.2024, 15:26
Как выполнить задачу на сервере для которой требуется времени больше чем установлено лимитами по умолчанию?

(без  cron, и без  php.ini: max_execution_time = 30)
Должно быть все просто - в браузере набираем в адресной строке адрес своей страницы и ждем полного выполнения php алгоритма, о чем в браузере должна появиться соответствующая надпись.
(возможно потребуется несколько минут)





Автор: Oldshelf 20.3.2024, 18:46
Решал похожую задачу с помощью переменной индекса прогресса. Если есть возможность разделить задачу на подзадачи, каждой из которых хватает лимита, то можно выполнять такие подзадачи последовательно обновляя скриптом страницу. Что-то типа этого:

Код

 $step=intval ($_GET ["step"]);

 //...

  $step++;

  print <<<xhtml
<script type="text/javascript">
//<![CDATA[
function refresh ()
{
 document.location.href="task.php?step=$step";
}
t=setTimeout("refresh()",100);
//]]>
</script>
xhtml;


Просто увеличивать счётчик $step на каждой итерации и передавать в переменной ?step=$step в этот же скрипт.

Автор: YahоО 20.3.2024, 23:27
Да, примерно так делал до того как написал свой вопрос:
Код

echo '<script>location.reload()</script>';

а подсчет шагов уже на стороне сервера.
Коротко и эффективно. А а хостеру похоже не очень понравилась моя идея, сначала все шло хорошо, но потом он меня попросту вырубил )) и я таки свой вопрос здесь и написал, в надежде что все же имеются еще варианты.
Oldshelf, благодарю за скрипт!

Автор: Oldshelf 21.3.2024, 05:56
Да, особенность скрипта именно в подборе тайм-аута. У меня скрипт был ресурсоёмкий и чтобы не нагружать сервер на полную ставил паузы в несколько секунд, давая возможность выполниться обычным запросам, которые могли затормозиться из-за повышенной нагрузки.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)