Actualización de la página web con el contenido del archivo txt usando PHP

Estoy usando PHP para leer un archivo .txt y analizar los datos en una página web. El archivo .txt es un archivo de registro local que muestra el estado de mi servidor, y actualmente puedo leer la última línea y enviarla a mi sitio.

Sin embargo, cuando cambia el estado de mi servidor, el archivo .txt se actualiza localmente, pero el nuevo valor nunca aparece en el sitio.

Estoy usando HTML5 / Javascript para mostrar el contenido y PHP para leer el archivo y analizar / limpiar la entrada. El segmento de código que adjunto, que muestra las funciones de lectura de archivos PHP que estoy usando, se ejecuta cada 10 segundos. Después de ejecutar este segmento, la pantalla (estoy usando un lienzo HTML5) se actualiza, pero los datos permanecen constantes. La pantalla solo se actualiza si actualizo la página manualmente.

¿Es posible sondear este archivo txt cada 10 segundos más o menos y empujar la última línea a una variable a la que pueda llamar?

function getCurrentStatus() {
    <?php           
        clearstatcache();

        $myFile = "C:\available.log";

        $fh = fopen($myFile, 'r');
        $theData = fread($fh, filesize($myFile));
        fclose($fh);

        $statusList = explode("\n", $theData);
        $statusListLength = count($statusList) - 2;
        $currentStatus = explode(" ", $statusList[$statusListLength]);
        $previousStatus = explode(" ", $statusList[$statusListLength - 1]);

        $myFile = "C:\std_server0.out";

        $fh = fopen($myFile, 'r');
        $theData = fread($fh, filesize($myFile));
        fclose($fh);

        $garbageCollector = array_map('trim',explode("\n", $theData));
        $garbageCollectorLength = count($garbageCollector);
    ?>
    currentStatus = ["Latest Status:", "<?php echo $currentStatus[0]; ?>", "First Started:", "<?php echo $currentStatus[1]; ?>", "<?php echo $currentStatus[2]; ?>", "Last Checked:", "<?php echo $currentStatus[4]; ?>", "<?php echo $currentStatus[5]; ?>"];      

    latestGC = "<?php echo $garbageCollector[$garbageCollectorLength - 2] ?>"
}

preguntado el 08 de noviembre de 11 a las 16:11

Puedes usar file_get_contents() en lugar de las tres líneas de fopen fread y fclose -

Parece que estás hablando de una técnica de inserción de servidor, que php no hace muy bien. Su apuesta más fácil es recargar periódicamente el estado a través de ajax. -

3 Respuestas

La razón por la que esto no funciona es porque JavaScript se ejecuta en el navegador del cliente, donde PHP se ejecuta en el servidor. Entonces, en la carga inicial, obtienes lo que esperabas porque mientras se creaba la página, PHP obtuvo el contenido de ese archivo. Sin embargo, después de eso, PHP desaparece y desaparece.

Probablemente deba considerar el uso de AJAX para actualizar periódicamente el contenido.

respondido 08 nov., 11:20

Ya veo, eso tiene sentido. Gracias por la explicación, miraré algunos ejemplos usando AJAX para mi aplicación. - Jarek

Sondear algo no es una buena idea. Lo que necesita es un servidor push sobre datos nuevos o datos modificados. Echa un vistazo a esto http://www.zeitoun.net/articles/comet_and_php/start

Espero que esto ayude.

respondido 08 nov., 11:20

Gracias, miraré ese ejemplo de chatbox, ya que parece ser similar a lo que estoy tratando de hacer. - Jarek

La ventaja de una técnica de envío al servidor es que le permite enviar datos al cliente en el momento en que ocurre un evento. Desafortunadamente, php no tiene un estado global ni un concepto de eventos. - Sam Dufel

Tuve un problema similar y descubrí que era un problema con el almacenamiento en caché del navegador. Puede verificar esto abriendo las herramientas de desarrollo en Chrome (Windows / Linux = Ctrl + Shift + I, Mac = Cmd + Opt + I) y deshabilitando el almacenamiento en caché allí.

Si esto resuelve el problema, entonces necesita encontrar una solución. Puede agregar una cadena de consulta ficticia única a cada página para engañar al navegador y hacerle creer que se trata de una página única. En mi caso, creé una marca de tiempo usando time () y la agregué a la URL de la página.

respondido 25 mar '15, 19:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.