我有一个基于PHP的网站,预订/约会存储在MySQL数据库中。
我想在预订前24小时向每位预订者发送电子邮件通知。预订通过常规PHP表格添加。
我知道我可以添加一个脚本,例如,索引页面检查数据库中是否有最后24小时内的任何预订,但这是不可靠的,因为我最初不会获得太多流量。所以索引页面可能会在几小时内没有访问,并且通知会延迟几个小时。
我想到的另一个解决方案是设置一个每分钟运行一次的cron作业,调用一个PHP脚本来检查是否应该发送任何电子邮件并发送它们。但我不确定这在某种程度上是否有点过分;有没有人比每分钟在后台运行一些东西有更好的解决方案?
总结一下 - 有没有办法在没有cron的情况下做到这一点?
答案 0 :(得分:1)
从网页触发作业是一个非常坏主意,原因有二:(1)如果您没有获得网站流量,则该作业无法运行; (2)如果收到大量通知,则作业将减慢对Web请求的响应(假设您同步调用作业)。
我强烈反对你每分钟都要做一份工作 - 这绝对是一种矫枉过正。相反,想想你是否确实需要“正好24小时”作为间隔,或者“在22到26小时之间”就可以了。
我们有类似的要求 - 并通过设置每4小时运行一次的作业并检查需要为脚本运行时间22到26小时之间的事件发送通知来解决这个问题。这样,脚本一天只执行6次,一切都正确发送。
如果4小时近似值不够好,那么请考虑适当的最大间隔。我相信1小时应该足够了。让脚本每小时运行一次(来自cron),并检查从运行之日起23到24小时内开始的事件。
请记住,一旦您的电子邮件被发送,它就不会立即收到收件人的收件箱中:有时需要几秒钟,但有时可能需要一个小时甚至更长时间 - 因此您的脚本中的额外小时差异将赢得不成问题。
答案 1 :(得分:0)
您不需要将cron用作间隔计时器。您可以在希望完成工作时设置非常具体的日期和时间。
<强> Here's an article on the subject 强>
例如:
0 0 18 5 * <php command here>
每年5月18日午夜开始。这是在下一次迭代(明年)之前清除它的时间。
答案 2 :(得分:0)
除了设置cron或通过定期调用向服务器发送请求之外没有办法......下面的帖子类似于你的问题,你可能会有所了解。
Live redirect based on periodic server calls with JSON or AJAX
谢谢
答案 3 :(得分:0)