From:             lew at mailduct dot com
Operating system: FreeBSD 4.8-RELEASE
PHP version:      4.3.3
PHP Bug Type:     Filesystem function related
Bug description:  feof behavior changed - inconsistent!

Description:
------------
The behavior of "feof" has changed with the newer versions of PHP (4.1.1
exhibited different behavior).  I believe 4.3.X has a problem with how it
handles "feof" under FreeBSD.

For example, suppose I want to "tail" a logfile that keeps growing, such
as "maillog" or even "httpd-access.log".  In the old PHP, once I reached
the end of file, "feof" would become true.  If a process *added* to the
file, then "feof" would become false until I read to the end of the file
again.  This is consistent with "tail" behavior.  Under the new PHP
(4.3.X), once "feof" becomes true, it *never* goes false again.  Thus, it
is *impossible* to "tail" a file!!

Reproduce code:
---------------
<?php

$fh = fopen( '/var/log/maillog' );

//  Endless loop, for testing purposes
while( TRUE ) {

  //  Perform a "tail" on a growing logfile
  while( !feof($fh) ) {
    $log = fgets( $fh,512 );
    print( $log );
  }

  //  We've hit the end, until more data ready
  print( "EOF detected... sleeping\n" );
  sleep( 1 );
}

?>

Expected result:
----------------
I expect to see all the lines contained in maillog until we hit the EOF. 
Then I expect to see the "EOF detected" until more lines are added to
maillog via another process.  At that point, I expect to see the new lines
of data until we hit the new EOF point again.

If I replace "fopen" with "popen" like this:
  $fh = popen( 'tail -f /var/log/maillog','r' );
then it works.  But I shouldn't have to spawn off a tail to do what the
older 4.1.X version of PHP used to do.  Someone has changed something in
how EOF is detected (and reset). 

Can you please see if you can find the cause of this.

Thank you for listening.



Actual result:
--------------
test line 1
test line 2
test line 3
EOF detected... sleeping
EOF detected... sleeping
EOF detected... sleeping
... forever ...
EOF detected... sleeping

(even though maillog continues to have more lines appended to it, either
through a daemon or a simple "cat more.txt >> /var/log/maillog" ).


-- 
Edit bug report at http://bugs.php.net/?id=25649&edit=1
-- 
Try a CVS snapshot (php4):  http://bugs.php.net/fix.php?id=25649&r=trysnapshot4
Try a CVS snapshot (php5):  http://bugs.php.net/fix.php?id=25649&r=trysnapshot5
Fixed in CVS:               http://bugs.php.net/fix.php?id=25649&r=fixedcvs
Fixed in release:           http://bugs.php.net/fix.php?id=25649&r=alreadyfixed
Need backtrace:             http://bugs.php.net/fix.php?id=25649&r=needtrace
Try newer version:          http://bugs.php.net/fix.php?id=25649&r=oldversion
Not developer issue:        http://bugs.php.net/fix.php?id=25649&r=support
Expected behavior:          http://bugs.php.net/fix.php?id=25649&r=notwrong
Not enough info:            http://bugs.php.net/fix.php?id=25649&r=notenoughinfo
Submitted twice:            http://bugs.php.net/fix.php?id=25649&r=submittedtwice
register_globals:           http://bugs.php.net/fix.php?id=25649&r=globals
PHP 3 support discontinued: http://bugs.php.net/fix.php?id=25649&r=php3
Daylight Savings:           http://bugs.php.net/fix.php?id=25649&r=dst
IIS Stability:              http://bugs.php.net/fix.php?id=25649&r=isapi
Install GNU Sed:            http://bugs.php.net/fix.php?id=25649&r=gnused
Floating point limitations: http://bugs.php.net/fix.php?id=25649&r=float

Reply via email to