我已经建立了一个网络应用程序,用户支付1/3/6个月并加入网站,我需要在帐户到期15天之前向用户发送提醒邮件,我该如何实现?我不理解正确的逻辑...我在数据库中存储注册日期,到期日期,这下面的逻辑工作正常吗?
<?php
$expiringDate = "2015-07-21";
$todaydate = date("Y-m-d");
$date = date("Y-m-d",strtotime("-15 days", strtotime($expiringDate)));
if($todaydate == $date){
//send mail
}else{
//quit
}?>
并且我想在今天到期日更改数据库中的值...是否可以在其他cronjob中执行此操作,或者我可以在上面的代码中执行此操作...
<?php
$expiringDate = "2015-07-21";
$todaydate = date("Y-m-d");
$date = date("Y-m-d",strtotime("-15 days", strtotime($expiringDate)));
if($todaydate == $date){
//send mail
}else{
//check and change the value if today is the expiring
}?>
我正走在正确的道路上,这是安全还是还有其他更好的方法来完成这项工作
答案 0 :(得分:0)
我建议每天运行cron工作。
然后,您的PHP脚本应检查所有在15天后过期的人。
然而,正如其他人指出的那样,如果你的cron工作有一天失败,你可能会错过一批人。
因此,我会检查15天或少的人,他们的数据库中没有针对他们设置的提醒标记。这意味着如果cron作业对于剩余15天的人失败,那么在剩余的14日/ 13日/ 12日,您的脚本将看到没有针对他们设置提醒标记,并且仍然会发送提醒。
<?php
$reminderSent = false; // Get this value from the db (true or false)
$expiryActioned = false; // Get this value from the db (true or false)
$expiringDate = strtotime('2015-07-21'); // Get this date from the db
$todayDate = time();
$reminderDate = strtotime("-15 days", $expiringDate);
if ($todayDate >= $reminderDate && $reminderSent == false) {
// Send mail
// Set flag $reminderSent in database to indicate reminder has been sent
} elseif ($todayDate >= $expiringDate && $expiryActioned == false) {
// Do something
// Set $expiryActioned in database to indicate the user has expired and something has been done about it
}
?>
然而,我不是选择所有人并使用上述逻辑运行它们,而是将上述逻辑构建到SQL查询中以提高效率。
快速举例:
// Select all users that expire in 15 days or less
SELECT `userid`, `name`, `email` FROM `user` WHERE NOW() >= DATE_SUB(`expiry`, INTERVAL 15 DAY) AND reminder_sent = 0
// Now loop through each user, send them an email and then:
UPDATE `user` SET reminder_sent = 1 WHERE `userid` = X
和
// Select all users that have expired
SELECT `userid`, `name`, `email` FROM `user` WHERE NOW() >= `expiry` AND `expiry_actioned` = 0
// Now loop through each user, do whatever you need to and then:
UPDATE `user` SET expiry_actioned = 1 WHERE `userid` = X