【问题标题】:Is it possible to make a PHP script run itself every hour or so without the use of a cronjob?是否可以在不使用 cronjob 的情况下让 PHP 脚本每小时运行一次?
【发布时间】:2012-05-21 01:30:13
【问题描述】:

我很确定我曾经在 php 脚本中看到过这种情况,尽管我找不到该脚本。它是一些脚本,它会自动检查该脚本的更新,然后在有更新时自行替换。

我实际上并不需要所有这些,我只是想让我的 PHP 脚本每 30 分钟到一个小时自动运行一次,但如果可能的话,我想在没有 cronjobs 的情况下这样做。

有什么建议吗?还是有可能?

编辑:在阅读了 RC 链接到的可能重复之后,我想澄清一下。

我想完全不使用 PHP 脚本之外的资源来完成这项工作。 AKA 没有发送 GET 请求的外部 cronjobs。我也想在不让脚本持续运行并休眠 30 分钟的情况下这样做

【问题讨论】:

  • 使用 Windows 任务计划程序 ;)
  • Linux 没有 Windows 任务计划程序 ;)
  • 不使用cron 有什么特别的原因吗?它专为您要执行的任务而设计;为什么要使用更骇人听闻的东西?
  • “天哪,另一个问题“我想要一辆独立于加油站运行的汽车””到底有什么帮助?这个问题没有错。当其他东西可能更适合这项工作时,为什么还要使用某些东西呢?我没有理由不了解其他选项,而不是无知地使用主流选项。

标签: php cron


【解决方案1】:

如果您获得足够的点击量,这将起作用...

在某处(文件、数据库等)存储上次更新时间。在获得足够命中的文件中添加一个代码,检查上次更新时间是否早于 xx 分钟。如果是则运行脚本。

【讨论】:

  • 嗯不错的主意。但是有问题的脚本需要大约 5-10 秒才能完成,这对于用户来说太长了,无法等待。
  • 用户不必等待。有很多方法可以解决这个问题。谷歌异步php请求
【解决方案2】:

您可能希望在指定时间使用 PHP 的 sleep 函数以该时间间隔运行您的代码,或者如果您愿意,您可能想尝试一些 online cron job services

【讨论】:

  • setcronjob.com 似乎提供的服务与目前已停业的 onlinecronservices.com 网站(截至 2015 年 2 月)
【解决方案3】:

我发现了这个:

<?php 
    // name of your file 
    $myFile="time.db"; 
    $time=file($myFile); 
    if(time()-3600 > $time[0]){ 
        // an hour has elapsed 
        // do your thing. 

    // write the new timestamp to file 
    $fh = fopen($myFile, 'w') or die("can't open file"); 
    fwrite($fh, time()); 
    fclose($fh); 
    } 

    else{ 
        // it hasn't been an hour yet, so do nothing 
    } 
?>

here

【讨论】:

  • 总是可以省略空的 else 语句。 ;)
【解决方案4】:

如果不让脚本持续运行,您要么必须使用不能保证实际运行的骇人听闻的东西(使用常规用户页面访问来运行辅助例程,以查看自上次运行以来是否已经过去了 X 时间脚本,如果是,请再次运行),或使用cron 之类的外部服务。普通的 PHP 脚本无法神奇地调用自身。

【讨论】:

    【解决方案5】:

    您可以使用来自真实访问者的 AJAX 调用在后台运行预定的作业(谷歌是“穷人的 cron”,那里有许多实现)或使用一些外部的类似 cron 的服务(例如其他机器上的 cronjob)。从理论上讲,您可以只运行一个没有超时的 PHP 脚本,并使其永远循环并在适当的时间触发请求,但唯一可以实现的是以非常无效和脆弱的方式重新发明 cron(如果脚本因某些原因而死原因,它永远不会自行重新启动,而 cron 只会再次调用它)。

    【讨论】:

      【解决方案6】:

      如果主机包含 mysql 5.1+ 数据库,那么也许定时触发器可以调用脚本?我喜欢这些不可能完成的任务类型的问题,但需要更多关于什么样的游乐场和规则的信息才能获得最佳答案。

      【讨论】:

        【解决方案7】:

        无论哪种方式,您都需要设置正确的execution time,以便脚本不会超过它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-15
          • 2016-04-27
          • 2017-12-15
          • 1970-01-01
          • 2012-03-01
          相关资源
          最近更新 更多