Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 要求我的网站每隔一两分钟运行一次cron脚本,这是一个糟糕的设计吗?_Php_Codeigniter_Cron - Fatal编程技术网

Php 要求我的网站每隔一两分钟运行一次cron脚本,这是一个糟糕的设计吗?

Php 要求我的网站每隔一两分钟运行一次cron脚本,这是一个糟糕的设计吗?,php,codeigniter,cron,Php,Codeigniter,Cron,基本上,我正在用PHP设计一个带有CodeIgniter的警报系统。我希望通过插入数据库行“安排”警报,然后定期分批发送警报。警报通过电子邮件发送 我认为实现这一点的唯一方法是要求cron脚本每隔一分钟左右调用一个仅限CLI的控制器,以检查计划的警报,并在发现任何警报时发送警报 有些事情告诉我,经常运行cron脚本设计得很糟糕,但我想不出任何其他方法来实现它 建议?好的,这就是你目前正在做的 Timed Cron Job | |-check for any new updates (in d

基本上,我正在用PHP设计一个带有CodeIgniter的警报系统。我希望通过插入数据库行“安排”警报,然后定期分批发送警报。警报通过电子邮件发送

我认为实现这一点的唯一方法是要求cron脚本每隔一分钟左右调用一个仅限CLI的控制器,以检查计划的警报,并在发现任何警报时发送警报

有些事情告诉我,经常运行cron脚本设计得很糟糕,但我想不出任何其他方法来实现它


建议?

好的,这就是你目前正在做的

Timed Cron Job
 |
 |-check for any new updates (in database)
       |
       |-Send them

Some Event happens to trigger alert
 |
 |-Store alert to send later in database
相反,只要这样做

Some Event happens to trigger alert
 |
 |-Send it
有东西触发了数据库插入

因此,与其插入电子邮件,不如调用您的电子邮件例程


我遗漏了什么吗?

一个简单的解决方法是让插入脚本检查自上次批量发送以来是否有阈值数量的警报排队。这不是一项定时工作,但这意味着任何时候等待的消息都不会超过阈值


但是,如果您确实需要定期执行此操作,并且您的站点不够繁忙,无法生成足够的警报,通常无法在时间限制内完成,那么cron作业是您唯一可行的选择。

通过将警报任务与代码的其余部分分离来实现警报异步是可取的

我不认为cron脚本有什么问题,我会问你为什么需要经常这么做? 设置阈值是一个好主意,但您仍然需要在一天结束时或任何时候进行检查,以确保它已启动


您可以使用控制器的全部开销(以及框架的其余部分),也许只需要编写一个轻量级的CLI php脚本

为什么不直接发送电子邮件呢?与其插入稍后要发送的行,不如发送它!问题->你不能每小时安排一次时间表吗?每分钟的更新听起来很像。。。另外,也许我没有理解你的意思,但是RSS提要难道不能完成同样的事情吗?@jondavidjohn-警报可以来自几个不同的来源。其中一个来自提交表。由于警报可能会发送给大量用户,因此当系统发送大量电子邮件时,让用户的浏览器坐在那里似乎是不可靠的。我希望在单独的进程中“幕后”执行,但PHP中的进程/线程分叉似乎不太可靠(我记得它只适用于*nix系统)。@fingerman-一旦计划好警报,就需要及时发送警报,我想不超过5分钟。@DWilliams-然后通过AJAX提交表单以启动脚本,这样它就不会锁定浏览器。正如他在上面的评论中所说,他的警报来自不同的来源,其中只有一个是提交的表单。