|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[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.
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 :)
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Oct 28 01:00:01 2025 UTC |
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).