2015-04-03 144 views
1

我正在PHP中使用其exec()函数运行外部脚本。我正在寻找各种选项来创建进度条。我能够通过AJAX创建一个简单的旋转加载器,但我无法实现百分比进度条。有没有办法做到这一点?如何在PHP执行函数中显示进度条

+0

PHP在服务器上执行,并完成之前不会返回任何值。 – 2015-04-03 17:56:50

回答

4

根据您要执行的程序,你可以使用proc_open()代替exec(),这样你就可以proccess输出,计算百分比和使用ob_flush()扔回去给你的AJAX脚本, 。

在发送任何输出之前,您需要等待执行完成并不是真的,但您的服务器缓存配置和浏览器渲染引擎有一些警告,所以它不太可靠。

如果您不使用Websockets(干净和现代的选项,可以通过PHP使用Ratchet或使用各种选项使用nodejs来实现),那么执行所需操作的最可靠方法就是使用轮询。

简而言之,您不需要调用一次脚本,而是先执行第一个ajax请求来初始化进程,然后再次启动服务器,以询问脚本的执行状态。

欲了解更多信息,看看这些问题的答案:

Run process with realtime output in PHP

PHP - Flushing While Loop Data with Ajax

Grab results from a php exec() while the command is still running?