php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #29023 fread() only reads 8192 bytes from a local file
Submitted: 2004-07-05 22:28 UTC Modified: 2005-05-23 14:58 UTC
Votes:2
Avg. Score:5.0 ± 0.0
Reproduced:2 of 2 (100.0%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: benjcarson at digitaljunkies dot ca Assigned: wez (profile)
Status: Closed Package: Filesystem function related
PHP Version: 5CVS-2004-07-05 (dev) OS: Linux
Private report: No CVE-ID: None
 [2004-07-05 22:28 UTC] benjcarson at digitaljunkies dot ca
Description:
------------
In the latest cvs snap, fread() does not read more than 8192 bytes from a local file, despite specifying a larger read size as the second parameter.  If the fread() call is wrapped in a while (!feof) loop the file can be read correctly, but only 8k at a time.  This contradicts the first example in the manual (http://www.php.net/manual/en/function.fread.php) and is a BC break.

As far as I can tell the change was made sometime between the 2004-06-22 snap and the 2004-07-04 snap.

I've tested both using my php.ini file and without (i.e. using the built-in defaults).  I configured using the following command:

./configure --prefix=/usr --with-apxs=/usr/bin/apxs \
            --enable-memory-limit \
            --with-layout-GNU\
            --enable-bcmath \
            --enable-calendar \
            --with-curl=/usr \
            --enable-exif \
            --enable-ftp \
            --enable-mbstring \
            --enable-shmop \
            --enable-sockets \
            --enable-sysvsem \
            --enable-sysvshm \
            --enable-wddx \
            --with-bz2 \
            --with-config-file-path=/etc/php5/apache \
            --with-gd=/usr \
            --with-freetype-dir=shared,/usr  \
            --with-jpeg-dir=/usr \
            --with-png-dir=shared,/usr \
            --with-ttf=shared,/usr \
            --with-xpm-dir=shared,/usr/X11R6 \
            --with-gettext \
            --with-kerberos=/usr \
            --with-ldap=shared,/usr \
            --with-mhash=shared,/usr \
            --with-mm \
            --with-ncurses=/usr \
            --with-openssl=/usr \
            --with-pcre-regex=/usr \
            --with-pear \
            --with-pgsql \
            --with-pspell=/usr \
            --with-zlib \
            --with-zlib-dir=/usr


Reproduce code:
---------------
#!/usr/bin/php
<?php
$filename = "/some/largish/local/file";
$fd = fopen($filename, 'r');
$contents = fread($fd, filesize($filename));

echo strlen($contents) ."\n";
fclose($fd);
?>

Expected result:
----------------
(the file's actual size, in bytes)

Actual result:
--------------
8192

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2004-07-06 09:14 UTC] derick@php.net
Assigning to Wez... although I'd say that this is *correct* behavior, it shouldn't cause a BC break.
 [2004-07-06 15:26 UTC] sniper@php.net
I really can't see how this can be CORRECT behaviour as this has worked (like it says in docs too :) before just fine.

OTOH, you should always use file_get_contents() instead anyway. :)

 [2004-07-06 16:42 UTC] benjcarson at digitaljunkies dot ca
While I realize that file_get_contents() is faster, the code that lead me to this bug was not my own.  It was Smarty (2.6.2, although 2.6.3 has the same problem), which has worked very well with PHP5 until now.
 [2004-07-10 12:57 UTC] wez@php.net
This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.


 [2005-05-22 00:39 UTC] lsmith@php.net
I think there are a couple dupes (#32810, #32469, maybe even #30441)  of this one. And on a recent win head snapshot it was still broken: php5-win32-200505191430
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Dec 26 23:01:28 2024 UTC