2011-06-23 63 views
7

我在黑暗中在這裏拍攝;我不知道如何做到這一點,所以一些指針和/或有用的教程的鏈接將是偉大的:在每秒更新一次的網頁上顯示一個txt文件

我有一個網站,我想顯示一個文本文件(服務器日誌)。可能嵌入。問題是,只要服務器中發生事件(通常比半秒快),就會更新此文件。我該如何做到這一點,以便網頁實時顯示文件,即顯示文件的實時提要?

我的猜測是,它會使用JavaScript和AJAX,但我的知識都相當有限。 任何指針和幫助,將不勝感激:)

回答

8

我的答案使用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; 
     } 
    ?> 
0

您可以使用jQuery .get每隔幾秒獲取文件並更新頁面以顯示內容。

+0

功能至極的值凱文需要的是」。setInterval(Method,Duration)' – reporter

+0

你介意提供一個jQuery的例子,以及我將如何實現它? – dukevin

+0

http://jquery-howto.blogspot.com/2009/04/ajax-update-content-every-x-seconds.html – Jon

0

有這樣做的各種方式......

你可以看看long polling

堅持一個meta refresh tag每隔X秒刷新頁面。

tail -f /path/to/log.log在終端將打開該文件的最後幾行的實時預覽 - 這是我所做的,如果我需要在調試時讀取錯誤日誌。

或者只是手動刷新頁面,可能會讓頁面自動更改它的內容。

正如你所說你的文件非常大,我會使用PHP file()函數來從文件中抓取第一個X數量的行,以保持帶寬降低和可讀性!

7

使用jQuery,你可以做以下

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

會刷新DIV ID爲element與文件內容每1個秒鐘

+0

我會稍後再嘗試一下,並讓你知道它是怎麼回事! – dukevin

+0

這是一個非常簡潔的解決方案,它工作得非常好! – hacket

0

其他人都談到加載日誌文件中每刷新但是根據這個migth文件的大小是一個壞主意。您可能希望創建一個服務器端頁面,該頁面將讀取日誌文件並跟蹤它已提供給您的多少內容,並只給您新的位。如果它的一個10k文件,它會很煩人(並且可能會很遲鈍),這會讓它每秒傳輸給你。

否則其他人似乎已經覆蓋了大部分客戶端的東西。

+0

這個文件大約是10MB – dukevin

+0

在這種情況下,您絕對不希望每次更新時都下載整個文件,並且希望進行這種增量更新。我不確定最好的方式來做到這一點,但你可能想知道你是如何做到的,然後在自己的問題上尋求幫助,以便它不會太寬泛。 – Chris

相關問題