@adrenalinruslan

Таймер как реализовать?

Ребят, у меня такой вопрос. Я учу PHP и решил сделать вот такой код: при нажатии на кнопку включается таймер 5 минут(допустим) и когда эти 5 минут пройдут, то произойдет опреденное действие ( Например в бд отправится запрос ). Но как сделать так чтобы этот таймер работал даже когда пользователь полностью вышел из сайта, удалил куки и все такое, тоисть таймер будет работать и отправит запрос в бд, даже если пользователя нету на сайте.
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ответы на вопрос 4
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
1. Создаёте в БД таблицу "Планировщик", куда, при клике пользователя, помещаете информацию о запланированном событии и времени его наступления.
2. Пишите скрипт, который сравнивает время этих запланированных событий с текущим и если время события уже наступило - выполняет его.
3. Вешаете скрипт из п.2 на cron раз в минуту.
4. ?????
5. PROFIT
Ответ написан
@Yan-s
Гуглим
php очередь задач
Ответ написан
Комментировать
proudmore
@proudmore
Иными словами, вам нужна асинхронность. Асинхронность - это не то, что вписывается в общую концепцию PHP request -> response. Вам нужно какое-то внешнее хранилище, не зависящее от цикла работы PHP.
К примеру, вы можете сохранять время, в которое нужно выполнить действие, в базу данных. А потом по cron выполнять скрипт, который будет проверять: есть ли уже таймеры, которые отработали свое, и потом выполнять действия на них.
Ответ написан
Комментировать
Wolfnsex
@Wolfnsex Куратор тега PHP
Если не хочешь быть первым - не вставай в очередь!
Но как сделать так чтобы этот таймер работал даже когда пользователь полностью вышел из сайта, удалил куки и все такое, тоисть таймер будет работать и отправит запрос в бд, даже если пользователя нету на сайте.

Я бы предложил поступить следующим образом:
0. Взять VPS, выделенный сервер или иную полноценную площадку, позволяющую использовать нужное ПО, а не только то, которое подготовил для нас хостер (*цены на VPS, вполне сравнимы с обычными хостингами)
1. Использовать утилиту at

Выглядит всё примерно следующим образом:
1. Пользователь отправляет какой-то запрос на сервер
2. Сервер обрабатывает его и формирует нужную команду, которая будет запущена через N минут
3. Команда выполняется через указанное время, все счастливы

Пример того, как выполнить что-то через 5 есть например здесь
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы