如何在没有cron的帮助下在PHP中制作调度程序?


How can I make a scheduler in PHP without the help of cron

如何在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表中的日期,则保留一个条件。然后调用要执行的方法。