【问题标题】:Display process log on a web page在网页上显示进程日志
【发布时间】:2010-07-15 10:18:32
【问题描述】:

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

现在我添加了

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

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

【问题讨论】:

    标签: php html meta-tags


    【解决方案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】:

      你可以:

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

      【讨论】:

        【解决方案3】:

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

            <script type="text/javascript">
        
            $(function(){
                window.setInterval('updateLog()', 5000);
            });
        
            function updateLog() {
                $.get('log.php');
            }
        
            </script>
        

        【讨论】:

          【解决方案4】:

          为什么不使用 javascript?

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

          您也可以使用 iframe,但我认为 AJAX perdiodical call 是一种更好的方法。

          【讨论】:

            猜你喜欢
            • 2016-06-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-01-29
            相关资源
            最近更新 更多