我希望能够在div窗口中显示日志文件的最后100行,并让它实时更新,因此如果将某些内容写入日志,该窗口将写入新的日志内容用户看。目前我只做了一次,但它工作正常,我只需要一种方法来实时更新它每秒:
<?php
$file = "logfile.log";
$f = fopen($file, "r");
while ($line = fgets($f, 100) ) {
print $line . "<br/>";
}
?>
答案 0 :(得分:3)
这是一个基本的解决方案。
这是你的html和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>
这是你的php文件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);
}
?>