ID: 32861
Updated by: [EMAIL PROTECTED]
Reported By: lew at mailduct dot com
-Status: Open
+Status: Assigned
Bug Type: Filesystem function related
Operating System: FreeBSD 4.11-REL
-PHP Version: 4.3.10
+PHP Version: 5.0.4, 4.3.10
-Assigned To:
+Assigned To: pollita
New Comment:
Assigning to Sara who knows this stuff..
Previous Comments:
------------------------------------------------------------------------
[2005-07-28 20:26:32] lew at mailduct dot com
After testing with the latest php5 release, this still has a problem.
Let me try to be more succinct in summarizing...
When operating with wrapper_type of 'plainfile' (such as when tailing
one or more files), the tv_sec and tv_usec (timeout) are ignored...
because stream_select insists on classifying FEOF as an important
event. While this may be true for a socket event (socket close, for
example... which is why we have socket_select instead), it is not true
for a plainfile event.
Ask yourself this question -- How would you make use of the 'timeout'
parameter when reading from a plainfile wrapper? It would never come
into play if FEOF awakens the stream_select call! The purpose of
stream_select is to let you multiplex streams... so you can WAIT for an
action to take place on a stream (or a timeout). If FEOF is allowed to
awaken the select (rather than waiting for a timeout or for data to
become available), then there's not much point to using that call...
You're forcing it to do [expensive] polling instead of relying on the
select() interrupt structure to do the work for you.
My second argument is this: Let's assume you insist FEOF should awaken
the select. If that's the case, then it still is not working
correctly... because if I *add data* to a file after the select
detected EOF, and then do a select again, it *still* thinks no data is
available (and that we're still at EOF even though we're not).
This is VERY broken.
------------------------------------------------------------------------
[2005-05-27 00:04:54] lew at mailduct dot com
I have now tested this using both PHP 4.3.11 and 5.0.4, and the bug
remains. My same prior notes apply. Please review.
------------------------------------------------------------------------
[2005-04-28 07:45:59] lew at mailduct dot com
I believe that under the OS and PHP version given in the headers of
this report, the stream timeout function is not working when used with
fgets as well. However, I will load the current PHP on the box and
test again, to ensure I provide you with accurate and complete
information and I'll open a new pr if necessary.
Let's close this one as Bogus.
------------------------------------------------------------------------
[2005-04-28 00:35:16] [EMAIL PROTECTED]
>From the stream_select() manual page:
The streams listed in the read array will be watched to see if
characters become available for reading (more precisely, to see if a
read will not block - in particular, a stream resource is also ready on
end-of-file, in which case an fread() will return a zero length string).
------------------------------------------------------------------------
[2005-04-27 21:53:44] lew at mailduct dot com
Description:
------------
Timeouts are ignored in stream_select. Instead, it always
returns with "1" as the number of streams affected, ignoring
any timeout seconds that are set.
This is true regardless of stream_set_blocking settings.
This may or may not be related to my reported FEOF problems:
pr #25649 (Sep 2003)
pr #32858 (Apr 2005)
Reproduce code:
---------------
$fp = fopen( '/var/log/maillog','r' );
## Tried both ways, got same results
#stream_set_blocking( $fp,TRUE );
#stream_set_blocking( $fp,FALSE );
$r = array( $fp );
while( TRUE ) {
$n = stream_select( $r,$w=NULL,$e=NULL,30 );
if( $n===FALSE ) echo "stream_select = FALSE\n";
else echo "stream_select = $n\n";
echo fgets($fp);
print( '.' );
}
Expected result:
----------------
Assuming no other program is writing to /var/log/maillog, I expect to
see a timeout condition every 30 seconds, as such:
stream_select = FALSE
Actual result:
--------------
Instead, I see iterations of:
stream_select = 1
as fast as the system can execute the loop.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=32861&edit=1