如何在PHP exec函数中显示进度栏

Aks*_*pal 1 php shell cmd exec

我正在使用PHP的exec()功能在PHP中运行外部脚本。我一直在寻找各种选项来创建进度条。我可以通过AJAX创建普通的旋转式装载机,但是无法达到进度条。有什么办法吗?

Raf*_*kel 5

根据要执行的程序,可以使用proc_open()代替exec(),因此可以处理输出,计算百分比,然后使用ob_flush()flush()将其扔回到ajax脚本中。

在发送任何输出之前,您不需要等待执行完成是不正确的,但是服务器缓存配置和浏览器呈现引擎存在一些警告,因此并不是那么可靠。

如果您不使用Websockets(干净而现代的选项,可以通过使用Ratchet的 PHP 或使用各种选项的nodejs 来实现),则最可靠的方式是轮询。

简要地说,您无需执行一次脚本调用,而是执行第一个ajax请求来初始化进程,然后一次又一次地戳服务器以询问脚本的执行状态。

有关更多信息,请查看以下答案:

在PHP中使用实时输出运行过程

PHP-使用Ajax刷新While循环数据

在命令仍在运行时从php exec()获取结果?