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

Reply via email to