Как установить задержку 24 часа на функцию в php? - PullRequest
0 голосов
/ 16 февраля 2012

У меня есть веб-приложение, написанное на php5.

Приложение позволяет пользователям регистрироваться, и я хотел бы отложить отправку различных деталей, таких как пароль и ссылки.Я хотел бы, чтобы электронное письмо, содержащее эту информацию, отправлялось через 24 часа после того, как пользователь получил сопротивление.

Как выполнить функцию, которая будет отправлять электронное письмо по истечении 24 часов?

Ответы [ 2 ]

0 голосов
/ 17 февраля 2012

Это будет зависеть от того, насколько точными должны быть «24» часа, но что-то вроде следующего подхода должно работать.

Создайте таблицу для хранения регистраций пользователей или адаптируйте существующую таблицу для хранения столбца registrationTime. Сделайте этот столбец nullable DATETIME, вы будете использовать его, чтобы держать ЧЧ: ММ регистрации пользователей. Новая (или измененная) таблица также должна содержать данные, относящиеся к электронным письмам, или общий идентификатор для пользователей, позволяющий выбирать правильные данные.

Наконец, вы должны настроить задание cron для запроса базы данных каждые x mins и выбора пользователей, которые зарегистрировались в течение y mins из 24 часов. Где x - это то, как часто вы хотите, чтобы задание выполнялось, а y - это некоторая степень допустимости того, как прошло около 24:00 часов.

Для любых результатов вы должны создать и отправить электронные письма. Наконец, вы должны установить флаг, чтобы показать, что с пользователем обращались - хорошим способом было бы установить для registrationTime значение null для всех пользователей, которым было отправлено электронное письмо.

Вот несколько ссылок, которые могут вам помочь:

Сравнить время в SQL Server Как сравнить время в SQL Server?

Представляем Cron http://www.sitepoint.com/introducing-cron/

0 голосов
/ 17 февраля 2012

Я бы настроил таблицу базы данных, которая обрабатывает вашу очередь электронной почты.Эта таблица может иметь столбец, который указывает, когда каждая строка, соответствующая одному письму, была поставлена ​​в очередь.Вы можете запустить задание cron, скажем, каждый час или около того, которое проверяет, истекли ли 24 часа.

email_type   | to             | data
--------------------------------------------------------------------------
registration | fred@stuff.com | {first_name: "Fred", last_name: "Stuff" }

Это решение является гибким, поскольку у вас могут быть другие типы электронных писем, которые вы хотите отложитьразное количество времени.Вы можете добавить столбец, который указывает, какой тип электронной почты и ваш код обрабатывает каждый тип по-разному.

Этот cronjob будет выполняться каждый час:

0 * * * * php check_mail_queue.php

Вы можете либодобавьте столбец, который указывает, было ли отправлено письмо, или просто удалите строку.Кроме того, если вы хотите, чтобы в каждом письме были пользовательские данные, сериализуйте массив, хэш, словарь и т. Д. И сохраните их в столбце таблицы.

...