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