【问题标题】:PHP-script refresh it self and restart execution-timePHP脚本自行刷新并重新启动执行时间
【发布时间】:2020-09-28 12:42:52
【问题描述】:

我有一个包含大约 500 多个元素的数组。这些元素将在一个函数中进行检查,然后我将不得不从 API 中为每个元素获取数据(每个元素都是一个查询),这不允许我在短时间内发出那么多请求。我将不得不运行一个延迟循环,这很可能会超过 30 秒。

我想要的是,我的 PHP 脚本应该执行一定数量的检查/请求并从“待办事项”列表中删除,然后自我刷新并在约 2 秒后继续工作。

一个 cronjob 将启动这个 php 脚本。

在“工作完成”或某种“故障”发生后,我如何管理 PHP 以重新启动脚本?这取决于这件事,取决于我如何将“待办事项列表”数组中的数据存储到文件或 $_SESSION 中。不想将其存储到数据库中。

如何在无需在服务器上或脚本本身之外进行设置的情况下解决此问题?

【问题讨论】:

  • 我不认为你可以。您想要的可能是一个队列,您可以将作业分块推送到该队列中,并且工作人员将拿起并运行它。如果您使用诸如 laravel 之类的框架,它们已经为队列内置了一些东西。如果没有,您可能必须找到外部的东西。

标签: php refresh execution


【解决方案1】:

PHP 生命周期是基于请求的,即不能自行刷新。

您可以使用:

  1. 在后台做一些工作的 cronjob
  2. Javascript on timer 用于从浏览器向 Web 服务器发起新请求,该请求将执行 PHP API 并返回新结果。例如:
<script>
function onTimerRefreshFromApi() {
    var request = new XMLHttpRequest();
    request.open('GET', '/api/url', true);

    request.onload = function () {
        if (this.status >= 200 && this.status < 400) {
            // On Success replace html
            element.innerHTML = this.response;
        } else {
            // We reached our target server, but it returned an error
        }
    };

    request.onerror = function () {
        // There was a connection error of some sort
    };

    request.send();
}

setInterval(onTimerRefreshFromApi, 1000);
</script>
  1. 在计时器上使用 Ajax,方法与 2) 类似。
  2. 使用标头指示浏览器按照所述进行刷新:Refresh a page using PHP

【讨论】:

  • 由于 cronejob 会启动它,我无法通过浏览器使用 javascript/ajax 或标头。谢谢回答,但我必须在真正的 PHP 中找到解决方案。我想过把executiontime设置为0,然后让脚本加载另一个脚本文件?完成后,关闭第一个脚本?
  • 是的,set_time_limit (0) 将帮助您防止超时并允许 php 脚本运行超过默认的 30 秒超时。
  • 当然,如果 cron 作业启动 first.php,那么它可以启动 second.php 或者您可以生成更多 php 无阻塞脚本 stackoverflow.com/questions/18152442/… 。我不明白你为什么要first.php 关闭second.php,因为后者会在它准备好后完成。如果您希望脚本在继续之前等待 2 秒,那么您可以使用 sleep(2)
猜你喜欢
  • 2020-07-29
  • 2012-07-23
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 2020-02-04
  • 2014-02-18
  • 2011-09-10
  • 1970-01-01
相关资源
最近更新 更多