如何在PHP中制作调度程序而不编写cron脚本?有标准的解决方案吗?
特性[示例]:在订阅到期后24小时向所有订阅者发送余数
标准的解决方案是在类unix操作系统上使用cron
,在Windows上使用计划任务。
如果你不想使用cron
,我想你可以尝试用at
来装配一些东西。但很难想象cron
是一个问题,但at
是a - ok的情况。
我看到的解决方案是循环(或一段时间)和sleep(3600*24);
每隔一段时间通过javascript发送一个ajax调用
在匆忙执行之前,请先阅读下面我的最终意见。
Cron确实是安排事情的最好方法。它简单、有效且广泛可用。话是这么说的,如果cron不可用,或者你绝对不想使用它,那么在传统的web服务器上运行一个非cron (Apache/PHP伪cron)的两种一般方法如下:
检查是否使用可加载资源
嵌入图像/脚本/样式表/其他在每个网页的某处。图片可能是浏览器支持的最好的(如果javascript关闭,则不能保证浏览器甚至会加载.js源文件)。这个页面将发送报头和空数据回浏览器(1x1清晰的。gif是好的-看看fpassthru)
来自PHP手册注释
<?php
header("Content-Length: 0");
header("Connection: close");
flush();
// browser should be disconnected at this point
// and you can do your "cron" work here
?>
检查每次页面加载
对于每一个你想自动化的任务,你都需要创建一些可调用的API——静态OOP、函数调用等等。对于每个请求,您检查是否有任何工作要做给定的任务。这与上面的类似,只是您没有为脚本使用单独的URL。这可能意味着在执行工作时需要很长时间来加载页面。
这将涉及到对数据库的选择查询,要么是对记录任务上次运行时间的任务表进行查询,要么是直接对有问题的数据进行查询,在您的示例中,可能是对订阅表进行查询。
<<p> 最终意见/strong>如果可能的话,你真的不应该重新发明轮子。Cron非常容易设置。
然而,即使你决定,在你看来,cron是不容易设置,考虑到这一点:每一个页面加载到你的网站,你将招致检查,看看需要做什么开销。另一方面,True cron将按照您设置的时间表(每小时等)执行命令行PHP,这意味着您的服务器运行任务检查代码的频率要低得多。
最大的潜在问题没有true cron
你冒的风险是你的网站没有足够的流量来获得足够频繁的更新。
创建cronjob表。其中保存cron job的日期。如果今天的日期等于creonjob表中的日期,则保留一个条件。然后调用要执行的方法。