【问题标题】:Show a txt file on a webpage which updates every second在网页上显示每秒更新的 txt 文件
【发布时间】:2011-09-21 00:15:05
【问题描述】:

我在这里有点摸不着头脑;我不知道如何做到这一点,所以一些指向和/或有用教程的链接会很棒:

我有一个网站,我想显示一个文本文件(服务器日志)。应该是嵌入的。问题是,只要服务器中发生事件(通常快于半秒),该文件就会更新。我怎样才能使网页实时显示文件,这意味着显示文件的实时提要?

我的猜测是它会使用 javascript 和 AJAX,但我对两者的了解都非常有限。 任何指针和帮助将不胜感激:)

【问题讨论】:

    标签: javascript jquery html ajax


    【解决方案1】:

    您可以使用 jQuery .get 每隔几秒获取文件并更新页面以显示内容。

    【讨论】:

    【解决方案2】:

    有多种方法可以做到这一点......

    您可以查看long polling

    粘贴 meta refresh tag 以每隔 X 秒刷新一次页面。

    终端中的tail -f /path/to/log.log 将打开该文件最后几行的实时预览 - 如果我需要在调试时读取错误日志,我会这样做。

    或者只是手动刷新页面,让页面自动更改其内容可能会很烦人。

    正如您所说,您的文件非常大,我会使用 PHP file() 函数从文件中获取前 X 行,以降低带宽并提高可读性!

    【讨论】:

      【解决方案3】:

      使用 jQuery,您可以执行以下操作

      setInterval(function() {
          $('#element').load('/url/to/file');
      }, 1000);
      

      将每 1 秒用文件内容刷新 ID 为 element 的 div

      【讨论】:

      • 我稍后会试试这个,让你知道结果如何!
      【解决方案4】:

      其他人讨论过每次刷新都加载日志文件,但根据文件的大小,这可能不是一个好主意。您可能想要创建一个服务器端页面,该页面将读取日志文件并跟踪已经给您的日志文件数量,并且只给您新的位。如果它是一个 10k 的文件,那么每秒将其传输给您会很烦人(并且可能会延迟)。

      否则其他人似乎已经涵盖了大部分客户端内容。

      【讨论】:

      • 在这种情况下,您肯定不希望每次更新时都下载整个文件,而是希望进行这种增量更新。我不太确定最好的方法,但你可能想在脑海中大致了解你是如何做到的,然后在他们自己的问题中寻求特定方面的帮助,这样就不会太宽泛.
      【解决方案5】:

      我的答案是使用 PHP 和 Ajax,尽管更改为 ASP 或任何其他语言并不难。
      在头脑中

          <script type="text/javascript">
      
              function Ajax()
              {
                  var
                      $http,
                      $self = arguments.callee;
      
                  if (window.XMLHttpRequest) {
                      $http = new XMLHttpRequest();
                  } else if (window.ActiveXObject) {
                      try {
                          $http = new ActiveXObject('Msxml2.XMLHTTP');
                      } catch(e) {
                          $http = new ActiveXObject('Microsoft.XMLHTTP');
                      }
                  }
      
                  if ($http) {
                      $http.onreadystatechange = function()
                      {
                          if (/4|^complete$/.test($http.readyState)) {
                              document.getElementById('ReloadThis').innerHTML = $http.responseText;
                              setTimeout(function(){$self();}, 1000);
                          }
                      };
                      $http.open('GET', 'loadtxt.php' + '?' + new Date().getTime(), true);
                      $http.send(null);
                  }
      
              }
      
          </script>
      

      在身体里

          <script type="text/javascript">
              setTimeout(function() {Ajax();}, 1000);
          </script>
          <div id="ReloadThis">Default text</div>
      
      </body>
      

      现在使用 loadtxt.php 读取文本文件的值

          <?php
              $file = "error.txt";
              $f = fopen($file, "r");
              while ( $line = fgets($f, 1000) ) {
                  print $line;
              }
          ?>
      

      【讨论】:

      • 感谢您提供更易于理解、编辑和调整(即可读)的内容。我已经在我的工具上寻找和工作了 3 天,这是第一个发布的工具。由于它比其他更容易阅读和理解,因此进行所需的调整也容易得多。干杯!
      【解决方案6】:

      使用这个

      setInterval(function() {
      jQuery.get('file.txt', function(data) {
         alert(data);
         //process text file line by line
         $('#div').html(data.replace('n','
      '));
      });
        
       }, 1000); 
      

      https://www.sitepoint.com/jquery-read-text-file/

      【讨论】:

        【解决方案7】:

        最后,是的,脚本和 div id="ReloadThis" 一起工作得很好!它还可以显示来自查询文本文件的 PHP 文件的信息,以便传入文本在显示在 div 元素中之前进行格式化。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-06-06
          • 2018-08-07
          • 2016-05-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-28
          相关资源
          最近更新 更多