php离开页面后继续执行

问题描述 投票:2回答:2

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

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

我想要实现的目标:如果我离开页面,过程将继续,如果我回来,它会显示正确的百分比。

示例:我运行该过程,它计数到54,我离开页面10秒,当我回来时它显示我140并继续冲洗。

可能吗?

php flush continue
2个回答
5
投票

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

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


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);
}

希望能帮助到你!!

© www.soinside.com 2019 - 2024. All rights reserved.