Таймер на фоне сервера

Рейтинг: 1Ответов: 1Опубликовано: 02.01.2015

Как создать таймер в php на фоне сервера для каждого пользователя?


По клику, сервер записывает в БД конечную дату в секундах:

$end = time() + 3600;

После этого нужно произвести старт таймера этому пользователю.


Запрос оставшегося времени:

$sec = time();

$time = $end - $sec;

По окончанию таймера, без участия пользователя нужно выполнить любой скрипт {...}

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

Без использования CRON, БЕЗ Linux

Ответы

▲ 2Принят

Запускать команды в опр. время можно командой at — т.е. я бы не полагался на БД и php а по событию назначал команды этой командой при клике. Напр. запускал в нужное время скрипт php с параметром id пользователя. Тогда и падение сервера не страшно.


Вы обновили вопрос, указав, что и на Linux расчитывать нельзя. Тогда есть еще решение, но, вангую, вы с ним не справитесь.

MySQL имеет собственный функционал для выполнения команд в заданное время: Event Scheduler. Примерно так можно создать событие:

CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO ... тут идёт процедура, которая выполнится через час.

Обычно там ставится любое SQL выражение. Но нам нужно выполнить внешнюю команду. Для этого понадобится расширить функционал MySQL пользовательской функцией sys_exec() из пакета "Sys".