我正在开发一个通过电子邮件向用户发送警报的应用程序。用户选择一个时间范围并设置在该时间范围内接收的任意数量的警报。
目标是以相等的时间间隔发送警报。
例如,用户设置 8 个警报 12 小时(每天重复)。我使用简单的除法来确定在哪个时间间隔一个接一个地发送 8 个警报。12 小时/8 次警报 = 1 小时 30 分钟的间隔。该代码应每 1h30m 执行 8 次。
我可以使用哪些 PHP 函数来创建此算法?请指教。
即兴发挥,这就是逻辑。除非我遗漏了什么,否则可以通过将开始时间、结束时间和最后一条消息作为时间戳存储在数据库中来完成。
$start = 0;
$end = 12;
$number_msgs = 8;
$interval = ($end - $start)/$number_msgs;
$now = time();
$last_msg = ; // last msg timestamp from db
if($now - $last_msg > $interval){
//send email
}
上面的代码需要一些调整来将时间间隔(上面以小时为单位)转换为秒(因为time()
是以秒为单位)
希望这是有用的。
cron
我认为使用或类似的东西会更好。默认情况下,PHP 将在 30 秒后停止运行任何脚本。如果您使用的是托管网络提供商,这通常是不可协商的。
我承认有些人编写了在本地运行的“控制台”类型的应用程序(例如通过命令行),但是由于你没有说你正在这样做,我认为我们可以安全地假设这不是案子。
一种使用方式cron
是:让用户指定时间间隔并将其存储在数据库中。然后在某个其他时间间隔(可能每分钟或每 5 分钟)检查数据库以查看您上次发送电子邮件的时间是否比请求的时间间隔长。如果是,您将发送另一封电子邮件并更新数据库中的“上次发送时间”值。
但是让 PHP 脚本“休眠”,或者更糟的是,被锁定在无限的 while 循环中,并不是对系统资源的良好利用。