2

我有一个基于 PHP 的网站,其中的预订/约会存储在 MySQL 数据库中。

我想设置一个电子邮件通知,以发送给每个在预订前 24 小时进行预订的人。预订是通过常规的 PHP 表单添加的。

我知道我可以添加一个脚本,例如,检查数据库中最后 24 小时内的任何预订的索引页面,但这是不可靠的,因为我一开始不会获得太多流量。因此,索引页面可能会持续数小时没有访问,并且通知会迟到数小时。

想到的另一个解决方案是设置一个每分钟运行一次的 cron 作业,调用一个 PHP 脚本来检查是否应该发送任何电子邮件并发送它们。但我不确定这在某种程度上是否过分。有没有人有比每分钟在后台运行一些东西更好的解决方案?

总结一下 - 有没有办法在没有 cron 的情况下做到这一点?

4

4 回答 4

1

从网页触发作业是一个非常糟糕的主意,原因有两个:(1)如果您的网站没有获得流量,则作业不会运行;(2) 如果您收到大量通知,该作业将减慢对 Web 请求的响应(假设您同步调用该作业)。

我也强烈劝阻你不要每分钟都跑一份工作——这绝对是一种矫枉过正。相反,请考虑您是否真的需要“正好 24 小时”作为间隔,或者“在 22 到 26 小时之间”是否可以。

我们有类似的要求 - 并通过设置每 4 小时运行一次的作业并检查在脚本运行后 22 到 26 小时之间开始的事件需要发送哪些通知来解决此问题。这样,脚本一天只执行 6 次,并且一切都被正确发送。

如果 4 小时的近似值不够好,请考虑合适的最大间隔。我相信1小时应该足够了。让脚本每小时运行一次(来自 cron),并检查从运行时间起 23 到 24 小时之间开始的事件。

请记住,一旦您的电子邮件被发送,它不会立即出现在收件人的收件箱中:有时需要几秒钟,但有时可能需要一个小时甚至更长时间 - 因此您的脚本不会出现额外的小时差异一个问题。

于 2012-05-17T16:28:12.970 回答
0

您不需要将 cron 用作间隔计时器。当您希望完成工作时,您可以设置一个非常具体的日期和时间。

这是一篇关于这个主题的文章

例如:

0 0 18 5 * <php command here>

将于每年 5 月 18 日午夜运行。这足以在下一次迭代(明年)之前清除它。

于 2012-05-17T16:22:37.750 回答
0

除了设置 cron 或通过定期调用向服务器发送请求之外别无他法……下面是与您的问题类似的帖子,您可能会明白。

基于 JSON 或 AJAX 定期服务器调用的实时重定向

谢谢

于 2012-05-17T16:24:02.167 回答
0

每分钟执行一次 cron 工作毫无意义!但是你可以每小时做一次 cron 工作,因为我认为它不会测量一个小时的差异或 2 小时。没有 cron 它不是任何其他方式。大约需要 2 秒(最多)才能完成,所以值得

于 2012-05-17T16:27:10.940 回答