|  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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Bug Type:
From: auke at muze dot nl
New email:
PHP Version: OS:


 [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: Sun Jun 11 02:03:37 2023 UTC