ID:               35859
 User updated by:  cpuidle at gmx dot de
 Reported By:      cpuidle at gmx dot de
 Status:           Bogus
 Bug Type:         Filesystem function related
 Operating System: WinXP SP2
 PHP Version:      5.1.1
 New Comment:

OK. I was further looking at the problem (yes, it *is* a problem, at
least in the documentation). I've now found that fread will normally
read the entire (local) file, not limited to 8K. However, as soon as
stream_wrapper_register is used, the 8K limit is effective:

<?php

class VariableStream {
    var $position, $varname;
    
    function stream_open($path, $mode, $options, &$opened_path) {
        $url = parse_url($path);
        $this->varname = $url['host'];
        $this->position = 0;
        return true;
    }
    
    function stream_read($count) {
        $ret = substr($GLOBALS[$this->varname], $this->position,
$count);
        $this->position += strlen($ret);
        return $ret;
    }
    
    function stream_eof() {
        return $this->position >= strlen($GLOBALS[$this->varname]);
    }
    
    function stream_stat() {
        return array('size' => strlen($GLOBALS[$this->varname]));
    }  
    
    function url_stat() {
        return array();
    }
}

function read($filename) {
    if (file_exists($filename) && ($fd = @fopen($filename, 'rb'))) {
        $size = filesize($filename);
        $contents = fread($fd, $size);
    }
    echo("\$filename $filename: \$size: $size strlen(\$contents):
".strlen($contents)."<br/>");
}

// local file
$filename = 'templates/elegant/show.tpl';

// will read entire file
read($filename);

stream_wrapper_register('var', 'VariableStream');

// will only read 8K
read($filename);

?>


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

[2005-12-31 15:40:41] cpuidle at gmx dot de

If Wez says this is the expected behaviour, then fine, but:

a) document it
b) don't change it around inbetween releases

Cheers,
Andi

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

[2005-12-31 15:36:16] cpuidle at gmx dot de

The documentation reads:

> fread() reads up to length bytes from the file pointer referenced by
handle. Reading stops when up to length bytes have been read, EOF (end
of file) is reached, or (for network streams) when a packet becomes
available, whichever comes first. 

Neither of the conditions is satisfied. The internal 8K limit is *not*
documented?

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

[2005-12-31 15:32:09] cpuidle at gmx dot de

Thanks. Could you verify that this behaviour has been changed between
5.0.5 and 5.1.1? Would it be worth to add to the documentation, that
for local files 8K is an internal limit?

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

[2005-12-31 15:27:51] [EMAIL PROTECTED]

See comments in bug #30936


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

[2005-12-31 14:20:24] cpuidle at gmx dot de

Description:
------------
I'm experiencing a very weird bug where fread is limited to 8K though
the source file (ANSI) is bigger than 8K. I was not able to reproduce
the bug standalone, only inside a complex application.

This does not happen with PHP5.0.5, but with 5.1.1.

Unfortunately the sample code does not reproduce the problem
standalone, but demonstrates the effect.

Reproduce code:
---------------
function _read_file($filename)
{
if ( file_exists($filename) && ($fd = @fopen($filename, 'rb')) ) {
    $contents = ($size = filesize($filename)) ? fread($fd, $size) :
'';
    echo("_read_file($filename) \$size: $size strlen(\$contents):
".strlen($contents)."<br/>");
    fclose($fd);
}
}

_read_file('templates/elegant/\show.tpl');

Expected result:
----------------
Output:
_read_file(templates/elegant/\show.tpl) $size: 9520 strlen($contents):
9520

Actual result:
--------------
Output:
_read_file(templates/elegant/\show.tpl) $size: 9520 strlen($contents):
8192


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


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

Reply via email to