我有一个简单的脚本,它通过for
循环从1到5000。它将输出实时刷新到浏览器,并显示带有%的进度条。
我所拥有的:如果我离开页面,该过程将中断。如果我回来,它从0开始。
我要实现的目标:如果我离开页面,则该过程继续进行;如果我返回页面,则显示正确的百分比。
示例:我运行该过程,一直计数到54,然后离开页面10秒钟,再返回时显示140,然后继续刷新。
有可能吗?
答案 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);
}
希望有帮助!