@6a6ajka

Ограничение времени выполнения скрипта PHP на хостинге, как реализовать?

Имеется грубо говоря, подобный скрипт Мне нужно, чтобы он выполнялся 3 минуты ровно.
while(true){

"тело скрипта"

sleep(10);
}


Данный скрипт находится на хостинге. Из документации PHP мы знаем:

max_execution_time
set_time_limit()

Не включает в ограничение Sleep, System, запросы http.

Если я поставлю лимиты на свой скрипт
max_execution_time 300
set_time_limit(300)

От этого скрипт не будет выполняться 3 минуты, т.к. в команде есть Sleep();

Server: nginx

Но я не могу изменить настройки ngnix на хостинге

Я подумал, а вдруг можно запустить через ajax, установив timeout

$.ajax({
    url: "https://url.con/ajax/test.php", // куда отправляем запрос
    error: function(){
        // будет вызвана в случае если пройдет 3 секунды, но ответа так и не было
      alert('no');
    },
    success: function(){
        // что-то делаем тут 
       alert('good');
    },
    timeout: 3000 // установка 3-х секундного тайм-аута
});


Но при выходе тайм аута, скрипт продолжает выполняться.

Что же делать в таком случае?

задача будет запускаться через Cron
  • Вопрос задан
  • 534 просмотра
Решения вопроса 1
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
при запуске в консольном режиме имеется ряд особенностей, например, по умолчанию время выполнения не ограничено. подробнее тут
проверяй при каждой итерации
time() - $_SERVER['REQUEST_TIME'] >= max_execution_time() - 10
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@wadowad
Через такой таймер ajax не будет вызываться каждые три минуты ровно. Таймер со временем всё больше и больше будет запаздывать (либо вообще будет остановлен, если вкладка неактивна). Если момент с точностью критичен, нужно писать таймер иначе и отключать "засыпание" в браузере.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект