在DIV中显示shell输出

时间:2014-03-31 08:39:27

标签: php jquery ajax html

如果我在php页面中运行此代码,我会在网页上将输出作为单独的行。生成输出时显示每一行。这很好,是我的预期。

do.php

$order   = array("\r\n", "\n", "\r");
$a = popen('rsyncd -Pav remote.server.com::files/file1.tar.gz localfile.tar.gz', 'r');

while($b = fgets($a, 64)) {
    ob_flush();flush();
        $update = str_replace($order,'<br />', $b);
        echo $update;
    ob_flush();flush();
}
pclose($a);

有什么办法可以通过点击按钮调用它并将输出写入DIV。理想情况下,当输出每一行时,它会覆盖DIV中的前一行。 (所以DIV只包含一行,并且不断更新。)

我试过这个:

<script type="text/javascript">
$(document).ready(function() {
    $.ajaxSetup({ cache: false });

    $("#btn").click(function () {
        $("#log").load("do.php");
        });

});
</script>
<button id="btn">GO</button>

<div id="log" class="log"></div>

这样可行,但我只能一次性获得所有输出,而不是每次都覆盖上一行。

我假设我需要使用ajax调用,但是如何在生成时获取每一行输出?

由于

更新

谢谢 - 我已经按照其中一个链接提供了建议,我收到了一些实时数据,但它不是纯文本。 -

在纯文本中应该是:

receiving file list ...

1 file to consider

wrote 102 bytes  read 119 bytes  442.00 bytes/sec

total size is 71424169  speedup is 323186.29  

我得到的是:

receiving file list ... <br />2����+$��g��A���

*/�/IU040RH�,I-VP(JMLQ04���

M����!<���d�6��

*�/I�Q(άJU�,V0741214�TP(.HMM)-  Z��YBt��ⲷ��<ũ٢ 

无论如何要把它作为纯文本。 ?

这是我测试的代码:

<script type="text/javascript">
        var last_response_len = false;
        $.ajax('./flushed-ajax.php', {
            xhrFields: {
                onprogress: function(e)
                {
                    var this_response, response = e.currentTarget.response;
                    if(last_response_len === false)
                    {
                        this_response = response;
                        last_response_len = response.length;
                    }
                    else
                    {
                        this_response = response.substring(last_response_len);
                        last_response_len = response.length;
                    }
                    console.log(this_response);
                }
            }
        })
        .done(function(data)
        {
            console.log('Complete response = ' + data);
        })
        .fail(function(data)
        {
            console.log('Error: ', data);
        });
        console.log('Request Sent');
        </script>

0 个答案:

没有答案