Re: Read Last Lines of a Text File

From: Date: Thu, 17 Jun 2004 15:13:47 +0000
Subject: Re: Read Last Lines of a Text File
References: 1 2 3 4  Groups: php.general 
Request: Send a blank email to php-general+get-188491@lists.php.net to get a copy of this message
Scott Miller wrote:
* Thus wrote Scott Miller (srmiller@interbel.net):
I have a text file (log file) that I want to be able to read the last 30
or
40 lines of. I've created the code below, but since this file is so
large
(currently 8 MB) it won't work. The code works on smaller files, but
not
this one. Can someone look at this below and tell me where I went
wrong?
... $fcontents = file($filename);
This will make your script consume lots of memory, and is very inefficient. You'd be better of using the unix tail command: $fp = popen("/usr/bin/tail -$limit $file", 'r'); if (! $fp ) { echo 'unable to pipe command'; } while (!feof($fp) ) { $line = fgets($fp); print $line; } Of course if you're simply going to output the results a simple: system("/usr/bin/tail -$limit $file"); Would do the job nicely. Curt -- First, let me assure you that this is not one of those shady pyramid
schemes
you've been hearing about. No, sir. Our model is the trapezoid! --
I've changed my script to the following: <?php $file ="/var/log/radius.log"; $fp = popen("/usr/bin/tail -$limit $file", 'r'); if (! $fp ) { echo 'unable to pipe command'; } while (!feof($fp) ) { $line = fgets($fp); print $line; } ?> And now get the following errors: Warning: Wrong parameter count for fgets() in /var/www/html/logs2.php on line 10 I get this over and over and over (like it's producing the error once per line in the log file).
prior to PHP 4.2 you had to use a second parameter for fgets. This parameter is the maximum length per line to read. $line = fget($fp,4096); will probably work. HTH, Oliver

« previous php.general (#188491) next »