【发布时间】:2015-04-03 17:53:14
【问题描述】:
我正在使用 PHP 的 exec() 函数在 PHP 中运行一个外部脚本。我正在寻找各种选项来创建进度条。我可以通过 AJAX 创建一个普通的旋转加载器,但我无法实现百分比进度条。有什么办法吗?
【问题讨论】:
-
PHP 在服务器上执行,完成前不会返回任何值。
我正在使用 PHP 的 exec() 函数在 PHP 中运行一个外部脚本。我正在寻找各种选项来创建进度条。我可以通过 AJAX 创建一个普通的旋转加载器,但我无法实现百分比进度条。有什么办法吗?
【问题讨论】:
根据您要执行的程序,您可以使用proc_open() 而不是exec(),这样您就可以使用ob_flush() 和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?
【讨论】:
PHP 在服务器上运行,因此无法实现(据我所知), 以下是一些已回答的问题,可能会对您有所帮助。
How to show loading status in percentage for ajax response?
Jquery:: Ajax powered progress bar?
【讨论】: