【问题标题】:Bootstrap progress bar in phpphp中的引导进度条
【发布时间】:2013-12-04 12:26:56
【问题描述】:

我有一个包含一些 html 和 php 的网页。 php是用来执行一些linux命令的。我想在我的网页中放置一个引导进度条,当下一个 linux 命令执行时会继续。

假设我执行了 4 个 linux 命令,每次执行完一个命令,进度条应该再前进 25%。

我在网上搜索过,但找不到任何我需要的东西。有什么建议吗?

目前只得到 php/html 部分:

function progressbarStatus($width) {

    echo "
            <div class = 'container'>

                    <div class = 'progress progress-striped active'>

                            <div class = 'progress-bar' role = 'progressbar' aria-valuenow = '$width' aria-valuemin = '0' aria-valuemax = '100'style = 'width: $width%'></div>

                            </div>

                    </div>

            </div>
            ";

}

【问题讨论】:

  • 使用 AJAX 请求查看命令是否已执行并相应地更新栏的宽度。你能添加一些你已经拥有的代码吗?
  • 我唯一拥有的是带有进度条的html部分。
  • 我会启动一个异步脚本,将其状态写入某种存储(mysql、memcache、内存、文件等),然后创建一个 ajax 脚本来检查状态,或者查看使用 ajax 请求进行长轮询,如果您选择长轮询,请注意对于某些浏览器,您需要执行类似 echo str_repeat(' ',1024) 之类的操作来启动进程。
  • 那么有没有一种方法可以让 Linux 告诉 PHP 何时执行了命令?如果没有,就没有办法正确地做到这一点。执行这些 Linux 命令需要多长时间?
  • 时间不同,但我相信大约是 10 秒。这实际上是我希望进度条显示的内容。

标签: php twitter-bootstrap progress-bar


【解决方案1】:

一种方法来做到这一点,并在此处通过 jQuery 以非常简单的格式进行了演示;

您将向具有该命令的 PHP 页面发送 AJAX 请求,PHP 页面将返回 json_encode(array('success'=&gt;true));,当接收并接受时,进度条会更新,下一个函数将开始加载。

我没有对此进行测试,它非常粗糙,但它(以简单的方式)向您展示了一种您可以使用的技术。

$.getJSON('linkToLinuxCommand1.php').done(function(data) {
    if (data.success === true) {
        $('.progress').css('width', '25%');
        $.getJSON('linkToLinuxCommand2.php').done(function(data) {
            if (data.success === true) {
                $('.progress').css('width', '50%');
                $.getJSON('linkToLinuxCommand3.php').done(function(data) {
                    if (data.success === true) {
                        $('.progress').css('width', '75%');
                        $.getJSON('linkToLinuxCommand4.php').done(function(data) {
                            if (data.success === true) {
                                $('.progress').css('width', '100%');
                                alert('Done!');
                            }
                        });
                    }
                });
            }
        });
    }
});

一些评论;

  • 只要Linux命令不回话PHP,就只能获取到PHP页面的done状态
  • 也许您需要在getJSON 请求中添加更多参数
  • 我不确定JSON是返回布尔值true还是false,所以也许你需要像字符串一样检查; data.success === "true"
  • 使用console.log(data) 继续检查data 返回的内容(在您设置PHP 页面以返回JSON 之后)
  • 您可能希望将这些函数绑定到触发器,例如 $('#button').click(function() {/* PLACE HERE */});,并将所有内容放在递归函数中

【讨论】:

  • 谢谢,我会调查的!
  • 是的,我也有一个按钮,然后进度条应该开始。举个例子谢谢!
  • 您能看看我在下面发布的代码吗?为了测试,我创建了一个带有 jquery 脚本和按钮的简单页面。似乎没有任何反应..
【解决方案2】:

这真的取决于你具体需要什么。但是,正如您所描述的,它应该通过 ajax 完成。问题在于 ajax 不允许延迟响应,因此您必须为每个任务进行 ajax 调用。

http://api.jquery.com/jQuery.ajax/http://api.jquery.com/animate/

【讨论】:

  • 在我的 php 脚本中有几个点我希望进度条进一步前进。我不一定需要检查它们是否完成,我只是想在调用一个php函数后更新进度条。
猜你喜欢
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-17
  • 2016-07-30
  • 1970-01-01
  • 2015-09-04
相关资源
最近更新 更多