2017-10-16 4 views
-1

Ich möchte in der Lage sein, die letzten 100 Zeilen einer Logdatei in einem Div-Fenster anzuzeigen, und sie in Echtzeit aktualisieren zu lassen, wenn also etwas geschrieben würde Im Protokoll würde das Fenster den neuen Protokollinhalt schreiben, den der Benutzer sehen kann. Zur Zeit mache ich das nur einmal, aber es funktioniert gut, ich brauche nur einen Weg, es Echtzeit zu aktualisieren jede Sekunde:Anzeige der letzten 100 Zeilen einer Logdatei in Echtzeit

<?php 
$file = "logfile.log"; 
$f = fopen($file, "r"); 
while ($line = fgets($f, 100)) { 
    print $line . "<br/>"; 
} 
?> 
+2

ist müssen Sie erhalten eine Timer + Ajax über Javascript verwenden, um ein PHP-Skript aufrufen, das bekommen neueste Zeilen. – aynber

+0

Mögliches Duplikat von [PHP - Zurückgeben der letzten Zeile in einer Datei?] (Https://stackoverflow.com/questions/1062716/php-returning-the-last-line-in-a-file) – cmorrissey

+0

@cmorrissey OP-Status : "Momentan mache ich das nur einmal, aber es funktioniert gut, ich brauche nur eine Möglichkeit, es jede Sekunde in Echtzeit zu aktualisieren" *. –

Antwort

2

Dies ist eine grundlegende Lösung ist.

Hier ist Ihre HTML und js index.php

<!doctype html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>Read Log File</title> 

</head> 

<body> 
<div> 
    <ul id="log"> 

    </ul> 
</div> 
<script src="./jquery-3.2.1.min.js"></script> 
<script> 

    $(function(){ 

     setInterval(function(){ 
      $.getJSON("./getLog.php", function(data) { 
       var $log = $('#log'); 
       $.each(data, function(key, val) { 
       $log.prepend("<li>" + val + "</li>"); 
       }); 
      }); 

     },5000); 

    }); 

</script> 
</body> 
</html> 

Hier Ihre PHP-Datei getLog.php

<?php 

    session_start(); 

    $file = '/path/to/your/file_log'; 

    $total_lines = shell_exec('cat ' . escapeshellarg($file) . ' | wc -l'); 

    if(isset($_SESSION['current_line']) && $_SESSION['current_line'] < $total_lines){ 

    $lines = shell_exec('tail -n' . ($total_lines - $_SESSION['current_line']) . ' ' . escapeshellarg($file)); 

    } else if(!isset($_SESSION['current_line'])){ 

    $lines = shell_exec('tail -n100 ' . escapeshellarg($file)); 

    } 

    $_SESSION['current_line'] = $total_lines; 

    $lines_array = array_filter(preg_split('#[\r\n]+#', trim($lines))); 

    if(count($lines_array)){ 
    echo json_encode($lines_array); 
    } 

    ?> 
Verwandte Themen