如何在没有cron帮助的情况下在PHP中创建调度程序

时间:2011-11-30 05:58:32

标签: php cron

如何在不编写cron脚本的情况下在PHP中创建调度程序?有没有标准的解决方案?

功能[例如]:24小时后向所有用户发送剩余部分b4订阅到期。

5 个答案:

答案 0 :(得分:2)

标准解决方案是在类似Unix的操作系统和Windows上的计划任务中使用cron

如果您不想使用cron,我认为您可以尝试使用at进行操作。但很难想象cron出现问题但at是A-OK的情况。

答案 1 :(得分:0)

我看到的解决方案是循环(for或while)和sleep(3600*24);

答案 2 :(得分:0)

通过javascript

每隔一段时间通过发送ajax调用来执行它

答案 3 :(得分:0)

在急于实施之前,请先阅读我的最终意见。


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。这可能意味着在执行工作时页面需要很长时间才能加载。

在您的示例中,可能在订阅表上,这将涉及对记录上次运行任务的任务表的数据库的选择查询,或者只是直接查询相关数据。

最终意见
如果可能的话,你真的不应该重新发明轮子。 Cron is very easy to set up
但是,即使您认为cron 易于设置,请考虑以下事项:对于您网站上的每个页面加载,您将产生检查查看的开销需要做什么。另一方面,真正的cron将按照您设置的计划执行命令行PHP(每小时等),这意味着您的服务器运行任务检查代码的频率要低得多。

没有 true cron

的最大潜在问题

您冒着没有足够流量访问您网站的风险,实际上经常发生更新。

答案 4 :(得分:-1)

创建一个cronjob表。其中保留了cron工作的日期。保持条件,如果今天的日期等于creonjob表中的日期。然后调用一个方法来执行。这样可以像CRON一样工作。