ID: 39961 Updated by: [EMAIL PROTECTED] Reported By: php_nospam at ramihyn dot sytes dot net -Status: Open +Status: Bogus Bug Type: Streams related Operating System: Win32,Linux x86 PHP Version: 5.2.0 New Comment:
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 Previous Comments: ------------------------------------------------------------------------ [2006-12-27 11:24:42] php_nospam at ramihyn dot sytes dot net Description: ------------ PHP's fread() function reads only the first 8192 bytes of any file accessed via a stream wrapper, even if the file is bigger and the wrappers' stream_eof() method returns false to signal it is NOT the end of the file. I expect fread() to repeat calling the wrappers' stream_read() and stream_eof() methods until stream_eof() signals the end of file or stream_read() returns less than the requested 8192 bytes. I encountered this behaviour with PHP 5.2.0 on Win32 and Linux x86. Reproduce code: --------------- <? class PHP_Bug { private $data; private $pos; function initializeStream() { $this->data = str_repeat("-",16399); $this->pos = 0; } function stream_open($fn) { $this->initializeStream(); return true; } function stream_stat() { $this->initializeStream(); return array(0,0,0100444,"mode"=>0100444,"size"=>strlen($this->data)); } function url_stat() { return $this->stream_stat(); } function stream_read($cnt) { echo __METHOD__."(".$cnt.")\n"; $ret = substr($this->data,$this->pos,$cnt); $this->pos += strlen($ret); return $ret; } function stream_eof() { $ret = ($this->pos >= strlen($this->data)); echo __METHOD__."=".(($ret)?"true":"false")."\n"; return $ret; } } stream_wrapper_register("bug","PHP_Bug"); $fs = filesize("bug://"); $fp = fopen("bug://","r"); $ret = fread($fp,$fs); fclose($fp); echo "size is ".strlen($ret)."\n"; ?> Expected result: ---------------- PHP_Bug::stream_read(8192) PHP_Bug::stream_eof=false PHP_Bug::stream_read(8192) PHP_Bug::stream_eof=false PHP_Bug::stream_read(8192) PHP_Bug::stream_eof=true size is 16399 Actual result: -------------- PHP_Bug::stream_read(8192) PHP_Bug::stream_eof=false size is 8192 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=39961&edit=1
