0

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

现在我添加了

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

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

4

4 回答 4

1

你可以:

  • 定期轮询服务器以查看是否有更多消息,基本上您将使用 javascript 调用 PHP 脚本,并在最后一次轮询中传递日志文件的长度,然后将新数据插入到文档中。服务器将返回该偏移量之后的所有数据以及新长度。
  • (更简单)制作一个长期存在的 PHP 脚本,该脚本会持续读取文件并在有新数据时立即回显并刷新它。请参阅PHP:如何实时读取不断写入的文件
于 2010-07-15T10:25:35.793 回答
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 来存储进程输出。

于 2010-07-15T10:49:41.523 回答
0

使用 AJAX 来执行此操作。在 jQuery 中很容易:

    <script type="text/javascript">

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

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

    </script>
于 2010-07-15T10:24:18.103 回答
0

为什么不使用javascript?

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

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

于 2010-07-15T10:24:19.927 回答