|   | php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | 
| 
 PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits              [2006-12-27 11:35 UTC] tony2001@php.net
  [2006-12-27 11:58 UTC] php_nospam at ramihyn dot sytes dot net
  [2006-12-27 12:04 UTC] php_nospam at ramihyn dot sytes dot net
  [2006-12-27 13:47 UTC] php_nospam at ramihyn dot sytes dot net
 | |||||||||||||||||||||||||||
|  Copyright © 2001-2025 The PHP Group All rights reserved. | Last updated: Fri Oct 31 07:00:01 2025 UTC | 
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