2011-06-23 12 views
7

Estoy disparando en la oscuridad aquí; No tengo conocimiento de cómo hacer esto, así que algunos punteros y/o enlaces a útiles tutoriales serían geniales:Mostrar un archivo de texto en una página web que se actualiza cada segundo

Tengo un sitio web que quiero mostrar un archivo de texto (registro del servidor). Probablemente incrustado. El problema es que este archivo se actualiza cada vez que suceden eventos en el servidor (más de medio segundo por lo general). ¿Cómo puedo hacerlo para que la página web muestre el archivo en tiempo real, lo que significa que muestra una transmisión en vivo del archivo?

Supongo que usaría javascript y AJAX pero mi conocimiento de ambos es bastante limitado. Se apreciará cualquier sugerencia y ayuda :)

Respuesta

8

Mi respuesta usa PHP y Ajax aunque cambiar a ASP o cualquier otro idioma no será difícil.
En la cabeza

<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> 

En el Cuerpo

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

</body> 

Ahora, utilizando loadtxt.php leer los valores del archivo de texto

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

Puede utilizar jQuery .get para obtener el archivo cada pocos segundos y actualizar la página para mostrar los contenidos.

+0

La función wich Kevin es necesario '.setInterval (Método, Duración) ' – reporter

+0

¿te importaría proporcionar un ejemplo de algunos jquery y cómo lo implementaría? – dukevin

+0

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

0

Hay varias maneras de hacer esto ...

Se podría buscar en long polling.

Pegue un meta refresh tag para actualizar la página cada X segundos.

tail -f /path/to/log.log en terminal se abrirá una vista previa en vivo de las últimas líneas de ese archivo - esto es lo que hago si necesito leer los registros de errores como depurar.

O simplemente actualice la página manualmente sobre la marcha, puede ser molesto que la página cambie su contenido automáticamente.

Como ha dicho su archivo es muy grande, usaría la función PHP file() para obtener la primera cantidad X de líneas de un archivo para mantener el ancho de banda abajo y la legibilidad.

7

Usando jQuery, se puede hacer la siguiente

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

refrescaba el div con ID element con el contenido del archivo cada 1 segundo

+0

Voy a ¡Pruébelo más tarde y déjele saber cómo va! – dukevin

+0

esta es una solución muy concisa y funciona muy bien! – hacket

0

Otros han hablado sobre la carga del archivo de registro de cada refresco pero dependiendo de el tamaño del archivo puede ser una mala idea. Es posible que desee crear una página del lado del servidor que lea el archivo de registro y realice un seguimiento de la cantidad que ya se le ha asignado y solo le proporcione los nuevos bits. Si es un archivo de 10k, sería molesto (y potencialmente lento) que te lo transfirieran cada segundo.

De lo contrario, otras personas parecen haber cubierto la mayoría de las cosas del lado del cliente.

+0

Este archivo tiene aproximadamente 10 MB – dukevin

+0

En ese caso, definitivamente no desea descargar todo el archivo cada vez que hace una actualización y desea hacer este tipo de actualización incremental. No estoy seguro de cuál es la mejor manera de hacerlo, pero probablemente quiera tener una idea general de cómo lo hace en su cabeza y luego pedir ayuda sobre aspectos específicos de su propia pregunta para que no sea demasiado amplia. . – Chris

Cuestiones relacionadas