Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php在离开页面后继续执行_Php_Flush_Continue - Fatal编程技术网

php在离开页面后继续执行

php在离开页面后继续执行,php,flush,continue,Php,Flush,Continue,我有一个简单的脚本,使用for循环从1计数到5000。它会将输出实时刷新到浏览器,并显示一个进度条,其中包含% 我所拥有的:如果我离开页面,进程就会中断。如果我回来,它从0开始 我想要实现的是:如果我离开页面,流程将继续,如果我回来,它将显示正确的百分比 示例:我运行该进程,它计数到54,我离开页面10秒,当我返回时,它显示我140,并继续刷新 有可能吗?我建议您使用服务器工作者-脚本,这些脚本旨在独立于Web服务器上下文运行 最常见的方法是使用消息队列(RabbitMQ、Qless等)。事件应

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

我所拥有的:如果我离开页面,进程就会中断。如果我回来,它从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);
}

您必须让任务在完全独立的进程中运行,例如通过cron作业或其他方式。网页脚本将仅用于监视进度。我猜,在会话中可能会出现。@ADyson但如果我使用cron作业,如何在另一个监视执行的页面中捕获其当前百分比?嗯,作业必须定期在某个位置写入当前状态,例如,输入文本文件或数据库表或其他内容。然后网页可以定期从那里阅读。很有趣。。因此,如果使用这些队列侦听器,我是否能够在另一个页面中捕获它们的进度,并在离开页面时显示正确的百分比?@DregKorig,工作人员可以修改web脚本可以读取的状态。例如,在Redis或DB中更改计数器。我认为,目的不是更改计数器的值,而是执行任务,即使用户关闭了选项卡。是的,这就是我在回答中提到的。