如何在特定时间间隔内运行PHP脚本(例如每天一次)?

时间:2009-05-14 19:57:58

标签: php autorun

我有一个php脚本,通过http读取一个文件(该文件在其他域上)。我想每天只阅读一次或两次此文件,而不是每次刷新网站时都连接到该文件。 除了使用cron还有其他方法吗? 我不想使用cron因为我更喜欢在脚本本身设置这种行为..因此它很灵活,所以我可以在任何地方使用它而无需每次都设置cron。 感谢

9 个答案:

答案 0 :(得分:12)

过去,当我无法访问cron时,我做过这种事情:

$lastRunLog = '/path/to/lastrun.log';
if (file_exists($lastRunLog)) {
    $lastRun = file_get_contents($lastRunLog);
    if (time() - $lastRun >= 86400) {
         //its been more than a day so run our external file
         $cron = file_get_contents('http://example.com/external/file.php');

         //update lastrun.log with current time
         file_put_contents($lastRunLog, time());
    }
}

答案 1 :(得分:7)

如果你不能或不想使用cron,只有在访问页面时才可以更新它。您可以缓存HTTP请求的结果,只有在缓存超过一天或您选择的任何时间间隔时,才会在页面上更新它以加载它。

答案 2 :(得分:3)

如果您想以定时间隔点击某个网站,也可以使用Web Based Cron

答案 3 :(得分:2)

你甚至可以使用数据库表 - 结构,id,日期,脚本url以及你需要的任何东西都非常简单 - 并且每次运行脚本时都添加一行。

然后,在运行脚本之前,只需检查每天的行数。

答案 4 :(得分:1)

您可以使用Cronjob。然后,您可以通过命令行运行php脚本。

php /someplace/somefile.php

如果您每天更新,Cronjob将如下。

0  0  *  0  0  php /someplace/somefile.php

答案 5 :(得分:1)

由于您明确声明您不想使用cron,因此执行此操作的唯一方法(没有类似于cron的方法)是将脚本设置为守护程序。但是,除非你真的需要守护进程提供的灵活性,否则cron会更容易和简单。

这是一个daemon walk-through

答案 6 :(得分:0)

如果您正在使用带有systemd的Linux发行版:

我需要安排基于年度的工作,独立于应用程序(如果系统重新启动或类似的事情),我得到了使用systemd Timers的建议。 Arch Wiki Page上有一些例子。

答案 7 :(得分:-1)

如果您使用的是* nix环境,则可以使用cron jobs

答案 8 :(得分:-1)

cron出了什么问题?

你有几个选择cron - 你的php可以通过命令行PHP解释器调用,或者你可以使用wget或fetch或等效的方法在服务器上调用你的PHP。

一般情况下,从Web服务器上下文中运行的PHP对执行时间有一个时间限制,所以一般情况下你不能设置“后台”PHP线程来“稍后”执行操作。