ID:               30936
 Updated by:       [EMAIL PROTECTED]
 Reported By:      jason at e7x dot com
-Status:           Assigned
+Status:           Bogus
 Bug Type:         Filesystem function related
 Operating System: Windows 2000/Linux
 PHP Version:      4.3.9
 Assigned To:      wez
 New Comment:

This is the intended behaviour.

You should *always* be prepared to call fread() multiple times until
you have read all the data.  The only exception to this rule is when
reading from a local file, for historical reasons.

The 8192 magic number is the chunk size used internally by PHP.

If you don't want to write a loop to read the data, use
stream_get_contents().



Previous Comments:
------------------------------------------------------------------------

[2004-12-01 08:45:24] [EMAIL PROTECTED]

Wez, might we have your comments on this one too?

------------------------------------------------------------------------

[2004-11-30 22:37:20] jason at e7x dot com

I'm afraid I still don't see the relevance of that sentence.
Surely "up to" does not mean it may stop reading at any point for no
apparent reason.

Maybe I'm not explaining this very well. Or maybe I've completely
missed the point of streams.

Looking in the source (not that I really understand what I'm looking
at) for 4.3.9 and comparing to 4.3.8, this looks suspicious:

main/streams.c line 656-658:
/* just break anyway, to avoid greedy read */
if (stream->wrapper != &php_plain_files_wrapper)
        break;

This is not in the source 4.3.8 (which worked as expected). If I
understand correctly is what prevents reading more than what may
already be in the buffer plus the next buffered chunk (so summary is
wrong, fread($f,1); fread($f,20000) the second will return 16383 bytes
(if available)).

I guess the issue is why a greedy read should be bad here and not
anywhere else.

It's not worth arguing about. I can read in smaller chunks and stick
them together as I go, but maybe the second warning on the fread manual
page should be expanded to include stream wrappers.

------------------------------------------------------------------------

[2004-11-30 08:41:57] [EMAIL PROTECTED]

http://ch.php.net/manual/en/function.fread.php

First paragraph:

"fread() reads up to length bytes from the file pointer referenced by
handle."



------------------------------------------------------------------------

[2004-11-30 00:27:43] jason at e7x dot com

Length bytes have not been read and EOF was not reached, this is not a
network stream.

In the example code there *are* 15000 bytes available to read. Regular
file system functions, compress.zlib (didn't try other builtin streams)
and PHP <= 4.3.8 have no problem reading more than 8192 bytes in one
hit.

I can't find any reference to an 8192 limit anywhere in the manual.

------------------------------------------------------------------------

[2004-11-29 23:24:45] [EMAIL PROTECTED]

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

http://php.net/fread says:

fread() reads up to length bytes from the file pointer referenced by
handle

note the \"up to\".

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/30936

-- 
Edit this bug report at http://bugs.php.net/?id=30936&edit=1

Reply via email to