#35859 [Opn]: fread limited to 8K

From: Date: Mon, 09 Jan 2006 21:14:54 +0000
Subject: #35859 [Opn]: fread limited to 8K
References: 1  Groups: php.doc 
Request: Send a blank email to phpdoc+get-969371494@lists.php.net to get a copy of this message
ID: 35859 User updated by: cpuidle at gmx dot de Reported By: cpuidle at gmx dot de Status: Open Bug Type: Documentation problem Operating System: WinXP SP2 PHP Version: 5.1.1 New Comment: Not sure why you couldn't find the code or what else you need but here it is again: Reproduce code: --------------- <?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 (>8k) $filename = 'templates/elegant/show.tpl'; // will read entire file read($filename); stream_wrapper_register('var', 'VariableStream'); // will only read 8K read($filename); ?> Expected result: ---------------- $filename templates/elegant/show.tpl: $size: 9520 strlen($contents): 9520 $filename templates/elegant/show.tpl: $size: 9520 strlen($contents): 9520 (!!) Actual result: -------------- $filename templates/elegant/show.tpl: $size: 9520 strlen($contents): 9520 $filename templates/elegant/show.tpl: $size: 9520 strlen($contents): 8192 (!!) Could you point me to where it's documented? Previous Comments: ------------------------------------------------------------------------ [2006-01-09 19:35:02] vrana@php.net This bug really miss the reproduce script ("Unfortunately the sample code does not reproduce the problem standalone, but demonstrates the effect."). The point lies in using fread() together with stream wrappers (it's somehow documented now) and the 8K limit. ------------------------------------------------------------------------ [2006-01-09 18:49:22] cpuidle at gmx dot de For code to reproduce see Bug #35918. Problem is that the block size is only in effect after stream wrapper functions are being used. And only in 5.1.1, not 4.x (obviously) or 5.0.5. This is what makes the thing fishy and imho more than a documentation issue. Thanks, Andi ------------------------------------------------------------------------ [2006-01-09 18:03:27] nlopess@php.net the packet size is 8k (8192).. ------------------------------------------------------------------------ [2006-01-09 17:58:49] nlopess@php.net Jakub probably clicked in the wrong button :) Anyway I think that the packet size (4k) should also be documented, thus leaving this bug open. ------------------------------------------------------------------------ [2006-01-09 16:25:23] vrana@php.net Thank you for this bug report. To properly diagnose the problem, we need a short but complete example script to be able to reproduce this bug ourselves. A proper reproducing script starts with <?php and ends with ?>, is max. 10-20 lines long and does not require any external resources such as databases, etc. If possible, make the script source available online and provide an URL to it here. Try to avoid embedding huge scripts into the report. ------------------------------------------------------------------------ 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/35859 -- Edit this bug report at http://bugs.php.net/?id=35859&edit=1

« previous php.doc (#969371494) next »