On Mon, 2002-02-04 at 19:22, Jared wrote:
> I am creating a script that reads "Radius" log files and prints them to
> the browser.  I want the User to be able to specify the Number of lines
> they want to see beginning at the end of the file and going up instead
> of reading the lines at the beginning (Which I can do). 
> Does anyone have an idea on how to do this?
> 
> Thanks in Advanced  Jared

I came up with two little routines for this sort of thing. The one using
arrays is faster on small files; the one using fseek() is much, much 
faster on big files. Take your pick:

<?php
function tail($filename, $lines) {
    /* Read file into an array. */
    $text = file($filename);
    
    /* Move to the last line. */
    end($text);
    
    /* Back up until we're the right number of lines from the end. */
    for ($i = 1, $cnt = count($text); $i < $lines && $i <= $cnt; $i++) {
        prev($text);
    }
    
    /* Now just dump them. */
    while (list(, $line) = each($text)) {
        echo $line;
    }
}

function tail($filename, $lines) {
    /* Open and position the pointer at the end of the file. */
    $fp = fopen($filename, 'r');
    fseek($fp, 0, SEEK_END);

    $filesize = filesize($filename);
    $nls = 0;
    $i = 1;
    while ($nls < $lines && $i < $filesize) {
        if  (($char = fgetc($fp)) === "\n") {
            $nls++;
        }
        fseek($fp, -2, SEEK_CUR);
        $i++;
    }

    $text = '';
    while (!feof($fp)) {
        $text .= fgets($fp, 4096);
    }

    echo $text;

    fclose($fp);
}
?>


Hope this helps,

Torben


-- 
 Torben Wilson <[EMAIL PROTECTED]>
 http://www.thebuttlesschaps.com
 http://www.hybrid17.com
 http://www.inflatableeye.com
 +1.604.709.0506


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to