On Thu, 2010-02-04 at 01:41 +0100, Dennis J. wrote:

> Hi,
> I'm trying to implement something similar to "tail -f" in php but I'm 
> running into a problem.
> The issue occurs when I've reached the end of the file. From here I 
> basically have to loop until new lines get appended to the file but I would 
> like to respond immediately when then happens. There are three options that 
> I can see:
> 
> 1. Busy-loop
> pro: I can process new lines immediately
> contra: Excessivley CPU intensive => not a real option
> 
> 2. add a sleep(1) to the loop
> pro: No longer kills the CPU
> contra: I might get a 1 second delay until I can process new lines
> 
> 3. stream_select(array($fh),null,null,1)
> pro: sleeps for one second but returns earlier if new data arrives
> contra: doesn't seem to work in files?
> 
> Method 3 is the preferable one but doesn't seem to work:
> 
> $fh = fopen("testfile","r");
> $r = array($fh);
> while( ($n = stream_select($r,$w=null,$e=null,1)) == 1 ) {
>      echo fgets($fh);
> }
> 
> This program will loop forever because stream_select() will always return 1 
> even at the end of the file.
> 
> Is there any other way to accomplish this?
> 
> Regards,
>    Dennis
> 


I thought that once it reached the end of the file, it will return a 0
indicating no new activity?

Although, surely you want the loop to continue forever, so that new
entries added to the end of the file are shown as soon as they appear.

Thanks,
Ash
http://www.ashleysheridan.co.uk


Reply via email to