Live feed of an updating file

前端 未结 2 1831
清歌不尽
清歌不尽 2020-12-21 07:56

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 th

相关标签:
2条回答
  • 2020-12-21 08:19

    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;
    
    0 讨论(0)
  • 2020-12-21 08:35

    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
    ?>
    
    0 讨论(0)
提交回复
热议问题