如何在不编写cron脚本的情况下在PHP中创建调度程序?有没有标准的解决方案?
功能[例如]:24小时后向所有用户发送剩余部分b4订阅到期。
答案 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一样工作。