在网页上显示进程日志

时间:2010-07-15 10:18:32

标签: php html meta-tags

我有一个网页,允许启动某个进程,然后重定向到显示该进程的日志文件的另一个页面。由于执行最多需要10分钟,因此我希望日志页面能够自动进行自动更新,或者定期从文件中加载数据。

现在我添加了

<meta http-equiv="refresh" content="5;url=log.php#bottom" /> 

到html / head,但想知道是否有更好的解决方案。有人可以提出任何关于解决这个问题的建议吗?

4 个答案:

答案 0 :(得分:1)

你可以:

  • 定期轮询服务器以查看是否有更多消息,基本上您将使用javascript调用PHP脚本,并在最后一次轮询中传递日志文件的长度,然后将新数据插入文档。服务器将返回该偏移量之后的所有数据以及新的长度。
  • (更简单)制作一个长期存在的PHP脚本,一旦有新数据,就会一直读取文件并回显并刷新它。见PHP: How to read a file live that is constantly being written to

答案 1 :(得分:1)

我是这样做的:

var current_length = 0;
function update() {
  setTimeout(update, 3000);
  $.post("/update_url", { 'current_length': current_length }, function(data) {
    if (data.current_length != current_length) return; //it's too old answer
    $("#log").html($("#log").html() + data.text);
    current_length += data.text.length;
  }, "json"); 
}
update();

服务器必须在开始时跳过几个字节,并使用current_length和文件的其余部分发送json。

我更喜欢使用memcached来存储流程输出。

答案 2 :(得分:0)

使用AJAX执行此操作。简单的jQuery:

    <script type="text/javascript">

    $(function(){
        window.setInterval('updateLog()', 5000);
    });

    function updateLog() {
        $.get('log.php');
    }

    </script>

答案 3 :(得分:0)

为什么不使用javascript?

使用setInterval并定期对log.php运行AJAX调用。

您也可以使用iframe,但在我看来,AJAX perdiodical调用是更好的方式。