PHP 4.0 Bug #9373 Updated: Filesystem read not binary safe?
| From: | auke at muze dot nl | Date: | Thu, 22 Feb 2001 10:46:27 +0000 |
| Subject: | PHP 4.0 Bug #9373 Updated: Filesystem read not binary safe? | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-47237@lists.php.net to get a copy of this message | ||
ID: 9373
User Update by: auke@muze.nl
Status: Open
Bug Type: Filesystem function related
Description: Filesystem read not binary safe?
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:
$curr=ftell($fp);
while ($char=fgetc($fp)) {
$new=ftell($fp);
if ($new>($curr+1)) {
echo " 0D";
}
echo strtoupper(dechex(ord($char)));
$curr=$new;
}
returns:
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).
Previous Comments:
---------------------------------------------------------------------------
[2001-02-21 09:05:31] auke@muze.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.
e.g.:
<?php
readfile("someimage.gif");
?>
delivers only a small part of the image, resulting in a broken image tag (usually) or the top part
of the image (sometimes). Whereas:
<?php
include("someimage.gif");
?>
does deliver the entire image (or a parse error :)
---------------------------------------------------------------------------
Full Bug description available at: http://bugs.php.net/?id=9373