|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #9373 Filesystem read not binary safe?
Submitted: 2001-02-21 09:05 UTC Modified: 2001-02-22 06:53 UTC
From: auke at muze dot nl Assigned:
Status: Closed Package: Filesystem function related
PHP Version: 4.0.4pl1 OS: Windows NT
Private report: No CVE-ID: None
View Add Comment Developer Edit
Anyone can comment on a bug. Have a simpler test case? Does it work for you on a different platform? Let us know!
Just going to say 'Me too!'? Don't clutter the database with that please !
Your email address:
Solve the problem:
21 + 17 = ?
Subscribe to this entry?

 [2001-02-21 09:05 UTC] auke at muze dot nl
Running PHP 4.0.4pl1 as an apache module (php4apache.dll)

When reading and writing files using any function except include() and require() the reading and writing seems to stop whenever a char(0) is encountered... I'm not exactly sure that is what happens, but textfiles are read and written without problems, binary files are cut short.



delivers only a small part of the image, resulting in a broken image tag (usually) or the top part of the image (sometimes). Whereas:


does deliver the entire image (or a parse error :)


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2001-02-22 05:46 UTC] auke at muze dot nl
I've been checking it a bit further, it seems that all filesystem read and write functions fail under the windows apache module.

fread and even fgetc will stop at char(26) and also, if they ancounter a 0D 0A (13 10, return+linefeed), even fgetc will only return a 0A. This is exactly the same behaviour as when it reads a single 0A, so there's no possible workaround. It seems simply impossible to read a binary file correctly. Even ftell seems to be in on the joke.

I've made a file containing ' 09 0D 0A 0A '
reading it with:

while ($char=fgetc($fp)) {
  if ($new>($curr+1)) {
    echo " 0D";
  echo strtoupper(dechex(ord($char)));


09 0D 0A 0D 0A

ftell actually counts the nonexisting second 0D

btw. ftell also doesn't start at 0, if you do a fseek($fp, 0) and then a ftell($fp), it will return a semirandom number (at least I haven't found out what it is).
 [2001-02-22 06:53 UTC]
This should be fixed in CVS already. Please try a dev build from


PHP Copyright © 2001-2023 The PHP Group
All rights reserved.
Last updated: Tue Jun 06 03:03:42 2023 UTC