php离开页面后继续执行

时间:2018-09-10 11:39:20

标签: php flush continue

我有一个简单的脚本,它通过for循环从1到5000。它将输出实时刷新到浏览器,并显示带有%的进度条。

我所拥有的:如果我离开页面,该过程将中断。如果我回来,它从0开始。

我要实现的目标:如果我离开页面,则该过程继续进行;如果我返回页面,则显示正确的百分比。

示例:我运行该过程,一直计数到54,然后离开页面10秒钟,再返回时显示140,然后继续刷新。

有可能吗?

2 个答案:

答案 0 :(得分:5)

我建议您使用服务器辅助程序-旨在独立于Web服务器上下文运行的脚本。

最常见的实现方式-使用消息队列(RabbitMQ,Qless等)。事件应该由脚本在Web上下文中启动,但是实际任务应该由队列侦听器在不同的上下文中执行。

答案 1 :(得分:0)

您所要询问的内容似乎与会话非常简单。 (在给定的用例上完全假设)。这不会在后台运行任何进程,而只是跟踪时间并显示进度。这就是为什么我说“根据您的要求”的原因。如果您想跟踪任何实际的后台任务,那么我相信情况会完全不同,并且您还必须更改问题的措辞;)

类似的事情会做。

<?php
session_start();
$s = &$_SESSION;

$sleep = 1; //seconds

//check if we have a value set in session before, if not set default = 0.
if(!isset($s['last'])){
    $s['last'] = 0;
}

//check if we have a last time set in session before. if not set a default = curret time.
if(!isset($s['time'])){
    $s['time'] = time();
}

//get the idle time of the user.
$idle = time() - $s['time'];

//start the loop..and set starting point.
$start = $s['last'] + ($idle / $sleep);

for( $i = $start; $i < 100; $i++){
    echo $i . '<br />';
    $s['last']++;
    $s['time'] = time();
    flush();
    sleep($sleep);
}

希望有帮助!