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