【问题标题】:Best way to periodically execute a PHP script?定期执行 PHP 脚本的最佳方法?
【发布时间】:2011-10-14 17:56:39
【问题描述】:

如果我可以完全访问服务器,我可能会想办法做到这一点,但问题是它只是一个托管服务,让我除了 FTP 访问之外什么都没有。 p>

我想定期运行一个 PHP 脚本来检查过时/损坏的内容、聚合新内容、删除未使用的文件等,但是该脚本可能需要 最多 60 秒 来执行(由于内容的聚合),我觉得在处理第一个访问该网站一小时后访问该网站的用户的请求时执行它就像一个混蛋:P

24/7 离开我的家用电脑来安排请求不是一种选择。

【问题讨论】:

  • Google for webcron,很多服务都提供这个。
  • 如果通过 HTTP 运行脚本,请注意执行超时。虽然您可以使用set_time_limit() 让 PHP 运行脚本的时间比平时更长,但某些 Web 服务器 (Apache) 有自己的进程时间限制,您无法更改。询问您的主机是否允许您设置 cron 脚本
  • 理论上,您可以通过两次访问来规避某些虚拟主机的硬时间限制。基本上,使用我的方法,然后将用户重定向 second 时间,运行长脚本的第二部分。将执行时间减半,并重定向用户两次。是的,可怜的用户。哈哈。

标签: php cron


【解决方案1】:

您可以使用在线 cron 服务来假装您拥有 cron 访问权限。

使用您想要执行的内容创建 php 文件

Free Cron Online Website

设置您的免费在线 cron 以每 x 分钟执行一次该文件。

【讨论】:

  • 哇,这是一个很棒的网站。这肯定会让我开始!
  • 是的,很棒的网站,已添加书签。感谢您告诉我们:)
【解决方案2】:

不确定这是否是正确的方法,但我以前只是在第一个用户访问该站点时触发一个脚本,然后向用户发送<meta http-equiv="refresh"... 以让他的浏览器刷新页面。原始的 PHP 脚本仍会在服务器上运行,但用户将不再看到它。

基本上是这样的:

if( check if the user is the first visitor today ) {
    set_time_limit(0);
    echo "<meta http-equiv='refresh' content='1;url=..." />"; // put your site baseurl in here

    ... run your scripts here
}

只是一个想法。可能行不通。试试看吧。

【讨论】:

  • 嘿,这听起来是个好主意。我假设使用 Header("Location: .."); 重定向用户也可以工作(即使它重定向了用户也可以继续脚本)?我会尽快尝试这个方法。
  • 是的,使用标头也可以。实际上,首先发送标头,然后是元标记(之后会出现错误),因此您要确保用户被重定向。某些浏览器可能会出于某种原因忽略标头(位置),因此元标记将确保重定向。只是我的一个习惯。希望这对你有用! :)
  • 好的,好东西!将尝试这两种方法,看看哪种方法最适合我:) 谢谢
  • 如果您这样做,那么当天的第一个访问者可能会收到陈旧的数据。在某些情况下,这可能是可以接受的,但我认为这不是一个很好的解决方案。
  • 嗯,这可能是可以接受的。或者使用基于 Web 的 cronjobs。也许,您甚至可以在 cron/php 脚本运行时显示“网站正在更新,显示的数据可能已过时”之类的消息,然后在完成后立即将其删除。有时,您只需要找到一种解决方法。
【解决方案3】:

您可以使用以下解决方案(仅限 PHP)不使用 cron:How to run PHP cron tasks without cron available

【讨论】:

    【解决方案4】:

    如果您的托管服务提供商只为您提供 FTP 访问权限,并且您不想安排来自另一台计算机的定期请求,那么您无能为力。您必须获得一个更好的托管帐户,最好是一个可以让您使用 cron 的帐户。

    【讨论】:

    • 依靠客户/访客来做这件事,然后将客户转移出去。见我上面的方法。 :)
    【解决方案5】:

    你为什么不使用

    crontab
    

    看这里:

    Cron wiki

    【讨论】:

    • OP特别说服务器上除了FTP没有其他访问权限。
    • 如果主机只提供 FTP 访问。他们会允许脚本执行超过 60 秒吗?
    • @ntenisOT 奇怪的是,我已经能够运行执行时间超过 2 分钟的脚本,实际上:P
    • 这真是奇怪的伙伴。 crontab 是最简单的方法。您可以使用您拥有的其他服务器在那里设置 crontab..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 2018-04-16
    • 2018-03-12
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    相关资源
    最近更新 更多