Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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 - Fatal编程技术网

执行时更新PHP进度

执行时更新PHP进度,php,Php,有没有办法让PHP在页面执行大型脚本时显示进度?例如,如果我正在分析一个大数组,我可以在整个过程中输出一个状态更新吗?有四种方法可以做到这一点。我只使用过其中两种: 1) 您可以定期推送输出(刷新),并希望它能够通过浏览器。这可能仅在某些情况下有效-web服务器(apache)可能有自己的缓存并为您保留数据,直到数据量足够大为止,ISP/Workplace/用户可能有自己的缓存,在整个页面完成之前可能不会转发信息,最后浏览器可能不会显示它。所以不推荐。(未使用) 2) 对本地文件(或数据库)进行

有没有办法让PHP在页面执行大型脚本时显示进度?例如,如果我正在分析一个大数组,我可以在整个过程中输出一个状态更新吗?

有四种方法可以做到这一点。我只使用过其中两种:

1) 您可以定期推送输出(刷新),并希望它能够通过浏览器。这可能仅在某些情况下有效-web服务器(apache)可能有自己的缓存并为您保留数据,直到数据量足够大为止,ISP/Workplace/用户可能有自己的缓存,在整个页面完成之前可能不会转发信息,最后浏览器可能不会显示它。所以不推荐。(未使用)

2) 对本地文件(或数据库)进行状态更新,然后通过AJAX进行查询。这已经在评论中提出了,你不需要仅仅通过上传文件来实现。您可以使用AJAX调用启动流程(使用一个公共标识符,如会话来链接所有调用),然后流程将其状态更新为一个文件(链接到公共标识符),然后AJAX定期调用服务器并读取状态文件。当状态文件显示“完成”时,您可以重定向到一个新页面(使用状态生成),也可以通过AJAX进行更新。这种方法非常有效——我上次在手机上使用它是为了在等待后台事件时保持手机站点的连接;如果其他一切都失败了,我就要“暂停”

3) 批量运行PHP脚本。如果PHP有一个最大执行时间,并且您很可能会超过它,那么您就需要这样做。基本上,您运行30秒,然后删除一个当前状态的页面,并在标题中进行元刷新,从最后一个进程离开的地方启动下一个进程。通过URL和HTML传递状态。如果使用这种方法,如果浏览器从未收到服务器的回音,那么如果互联网连接不可靠,浏览器可能会失败;因此,与AJAX方法相结合(即AJAX调用“请先执行50,等待完成,更新状态,请执行下一个50,等待,更新状态等”)是一个很好的混合解决方案。如果您从先前处理的位置开始,您还需要确保您的脚本能够安全地处理处理


4) 您打开一个从浏览器到服务器的javascript套接字,并通过套接字进行更新。由于浏览器中缺少对套接字的支持,因此我从未使用过此方法。但是,如果您了解观众,并且他们的浏览器很好地支持套接字,则可以使用一些示例。

到目前为止,您发现了什么?整个页面在脚本中都是白色的解析arrayI只会显示一个旋转的轮子是的,但它有点复杂。你必须在你的工作中创建“检查点”(大)脚本,然后创建一个状态报告脚本,报告您已完成的检查点的数量。然后通过JS轮询状态报告脚本并更新页面。看看这是如何完成的:似乎可以工作,除了上传文件之外,有人做过这件事吗?