我有一个简单的脚本,从1到5000计数与for
循环。它将输出实时刷新到浏览器并显示带%的进度条。
我拥有:如果我离开页面,进程将中断。如果我回来,它从0开始。
我想要实现的目标:如果我离开页面,过程将继续,如果我回来,它会显示正确的百分比。
示例:我运行该过程,它计数到54,我离开页面10秒,当我回来时它显示我140并继续冲洗。
可能吗?
我建议您使用服务器工作程序 - 旨在独立于Web服务器上下文运行的脚本。
最常见的方法 - 使用消息队列(RabbitMQ,Qless等)。事件应由Web上下文中的脚本启动,但实际任务应由队列侦听器在不同的上下文中执行。
您提出的问题似乎很简单。 (纯粹假设用例给出)。这不是在后台运行任何进程,只是简单地跟踪时间并显示进度。这就是为什么我说“基于你的要求”。如果你想跟踪任何真实的后台任务,那么我相信这个案例会完全不同,你也必须改变你的问题的措辞;)
像这样的东西会做。
<?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);
}
希望能帮助到你!!