Здравствуйте. И так, назрел вопрос. Как же всё таки нормально оформить таймер обратного отсчёта времени? Суть такова, человек получает что то на час. Это считывается к примеру функцией time();
. Добавим туда наш час time() + 60 * 60;
Получается что есть две переменные. То что нужно. И то что сейчас.
То число, которое нам нужно прибавить человеку, для его дела, заносим в бд. Всё отлично, успешно заносится в бд. А что же первое? Что же делать с ним? Ну себе я лично представлял что будет некое сравнение происходить, примерно вот таким образом :
if( $currentTime >= $toTime)
{
echo "Время истекло";
}else{
$leftTime = ($toTime - $currentTime); // получим в секундах число.
# $leftTime = 60 * ($toTime - $currentTime);// число в минутах.. и т.д.
}
Ну вот и получаем собственно говоря, наш таймер, который что то делает спустя целый час. Так вот, как оформить сие чудо, чтобы он брал время человека и начинал отсчёт от к примеру регистрации : человек зарегистрировался, получил на час получение письма, время истекло, он не подтвердил, и его удалило. Но тут попроще, ничего такого делать не нужно. Просто чтобы обработка как то происходила. Вот пример запроса в бд.
$query = "SELECT * FROM `Users` WHERE `login` = '{$login}' and `password` = '{$password}' LIMIT 1";
где он возвращает массив данных. Из которого, мы уже берём данные, такие как login , password , ну и date (time) . А дальше делать проверку? Брать значение из бд и сравнивать с текущим временем?
Тогда второй назревает вопрос. Если я даже и получил это значени и осталось минут 5 до окончания, как сделать постоянную проверку такого времени? Чтобы не при обращении была проверка, а всегда. Надеюсь всё расписал подробно и доходчиво.
Для этого вам необходимо воспользоваться средствами cron'а, а именно настроить запуск скрипта раз в минуту\две\три (как настроите), который будет брать из базы все строки, toTime в которых меньше текущего времени и не стоит флаг "уже обработан" (в таблицу добавьте тогда еще один столбец), обрабатывать их и заносить в базу что строка обработана.
А если делать еще лучше - то создайте таблицу actions в которой будет указываться айди пользователя, название действия которое необходимо делать и срок, в который это необходимо делать. А затем уже настраиваете крон на запуск скрипта, который будет брать строки из этой таблицы где время "уже пришло", обрабатывать их (можете в зависимости от значения в столбце action написать что-то типа switch ($resRow['action']) { case 'register': do_smth(); break }
) и после этого удалять из базы эту строчку, чтоб не держать в базе кучу лишней информации. Этот способ предпочтительнее.
Можно сделать выполнение и на хитах. Делаем метод, который будет обрабатывать все события для каждого пользователя: checkEvents($userId);
Этот метод получает из таблицы все необработанные действия с их крайними сроками. Если время вышло, а задание не выполнено, то запускает нужный коллбэк для каждого события(удалить, напомнить и продлить на час и т.п.).
Если время ещё есть, можно выводить список текущих задач.
Метод checkEvents($userId) запускать при рендере страницы в начале.
Но как и говорили, лучше перенести все такие задачи на крон, который будет запускать этот же метод, только для всех пользователей.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Не могу понять, почему функция вывода различных записей работает на локальном сайте, но не работает на живом сайте? Вот например эта:
Запрашиваю ввод в командной строке, в PHP CLI SAPI, с помощью функции readline(), но в командной строке, при вводе русских символов, каракули, и иэроглифыЗнаю,...
Ситуация такая, я пытаюсь запустить драйвер на target машине по гайдуНо получаю ошибку выше