在网页上显示进程日志

发布于 2024-09-10 15:12:55 字数 248 浏览 5 评论 0原文

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

现在我添加

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

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

I've got a web page that allows to start a certain process and then redirects to another page that displays log file of that process. Since execution takes up to 10 minutes, I want log page to autoupdate itself or load data from the file periodically.

Right now I added

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

to html/head but wondering if there may be a better solution. Can someone give any advice on aproaching this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

怪我鬧 2024-09-17 15:12:55

我这样做:

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 来存储进程输出。

I do it this way:

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();

The server must skip several bytes at beginning and send json with current_length and the rest of file.

I prefer using memcached to store process output.

骄兵必败 2024-09-17 15:12:55

您可以:

  • 定期轮询服务器以查看是否有更多消息,基本上您会使用 javascript 调用 PHP 脚本,并在上次轮询中传递日志文件的长度,然后将新数据插入到文档中。服务器将返回该偏移量之后的所有数据以及新的长度。
  • (更简单)制作一个长期存在的 PHP 脚本,该脚本不断读取文件并在有新数据时立即回显和刷新它。请参阅 PHP:如何阅读一个不断被写入的实时文件

You could:

  • Periodically poll the server to see if there are more messages, basically you would call a PHP script with javascript and would pass the length of the log file in the last poll and then insert into the document the new data. The server would return all the data after that offset and also the new length.
  • (simpler) Make a long lived PHP script that keeps reading the file and echo and flush it as soon as there's new data. See PHP: How to read a file live that is constantly being written to.
海未深 2024-09-17 15:12:55

使用 AJAX 来执行此操作。在 jQuery 中很简单:

    <script type="text/javascript">

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

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

    </script>

Use AJAX to do this. Easy in jQuery:

    <script type="text/javascript">

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

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

    </script>
不奢求什么 2024-09-17 15:12:55

为什么不使用 JavaScript?

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

您也可以使用 iframe,但我认为 AJAX 定期调用是更好的方法。

Why not use javascript?

Use setInterval and run an AJAX call to log.php periodically.

You could also use an iframe, but the AJAX perdiodical call is a better way of doing it in my opinion.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文