Reputation: 23178
I have a php file that prints the last 50 lines of a txt file. However, this file gets appended every second and would like to view a "live feed" of the action. How can this be done? This is the code for the php file:
<?php
$filename = '/home/duke/aa/servers/df/var/logs.log'; //about 500MB
$output = shell_exec('exec tail -n50 ' . $filename); //only print last 50 lines
echo str_replace(PHP_EOL, '<br />', $output); //add newlines
?>
Upvotes: 3
Views: 10867
Reputation: 1468
With ajax. If you need cross-browser compatibility, replace the AJAX function I provided with one from a library like jQuery.
<html><head></head><body>
<div id="feed"></div>
<script type="text/javascript">
var refreshtime=10;
function tc()
{
asyncAjax("GET","myphpfile.php",Math.random(),display,{});
setTimeout(tc,refreshtime);
}
function display(xhr,cdat)
{
if(xhr.readyState==4 && xhr.status==200)
{
document.getElementById("feed").innerHTML=xhr.responseText;
}
}
function asyncAjax(method,url,qs,callback,callbackData)
{
var xmlhttp=new XMLHttpRequest();
//xmlhttp.cdat=callbackData;
if(method=="GET")
{
url+="?"+qs;
}
var cb=callback;
callback=function()
{
var xhr=xmlhttp;
//xhr.cdat=callbackData;
var cdat2=callbackData;
cb(xhr,cdat2);
return;
}
xmlhttp.open(method,url,true);
xmlhttp.onreadystatechange=callback;
if(method=="POST"){
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xmlhttp.send(qs);
}
else
{
xmlhttp.send(null);
}
}
tc();
</script>
</body></html>
You will have to create a php file called myphpfile.php (or change the code above to reference the correct file) and put the following in it (as taken from your question):
<?php
$filename = '/home/duke/aa/servers/df/var/logs.log'; //about 500MB
$output = shell_exec('exec tail -n50 ' . $filename); //only print last 50 lines
echo str_replace(PHP_EOL, '<br />', $output); //add newlines
?>
Upvotes: 6
Reputation: 14873
check using php, Efficient last lines file reading in PHP
http://mydebian.blogdns.org/?p=197
or
if tail is installed on the server, a quick
$logfile = '/home/duke/aa/servers/df/var/logs.log';
$numlines = "50";
$cmd = “tail -$numlines '$logfile'”;
$output = shell_exec($cmd);
echo $output;
Upvotes: 0