#23747 [Opn->Bgs]: GD-PNG fatal error
| From: | nlopess@php.net | Date: | Sat, 03 Apr 2004 16:02:55 +0000 |
| Subject: | #23747 [Opn->Bgs]: GD-PNG fatal error | ||
| References: | 1 | Groups: | php.doc |
| Request: | Send a blank email to phpdoc+get-969359919@lists.php.net to get a copy of this message | ||
ID: 23747
Updated by: nlopess@php.net
Reported By: rryda at mgedata dot cz
-Status: Open
+Status: Bogus
Bug Type: Documentation problem
Operating System: Windows 2000
PHP Version: 4.3.2RC4
New Comment:
Sorry, but your problem does not imply a bug in PHP itself. For a
list of more appropriate places to ask for help using PHP, please
visit http://www.php.net/support.php as this bug system
is not the
appropriate forum for asking support questions.
Thank you for your interest in PHP.
Previous Comments:
------------------------------------------------------------------------
[2003-08-29 09:45:34] simon at simonwheatley dot co dot uk
I have also intermittently encountered this error.
Running PHP on Xcalibre.co.uk
http://daffy.xcalibre.co.uk/phpinfo.php
I believe they run Slackware.
My images were created by the imagepng() and are edited by php only.
My first thought was that two instances of the script were accessing
the same image?
------------------------------------------------------------------------
[2003-05-23 06:52:52] wez@php.net
of course, the copy() version should look like this:
<?php
$local = tempnam("", "gd");
copy("http://", $local);
?>
otherwise you don't know where you copied it to...
------------------------------------------------------------------------
[2003-05-23 06:49:59] wez@php.net
Not really a bug; fread() will now (correctly!) return data in packet
sized chunks when reading from network streams, as it did in PHP 4.2.x
and earlier.
Technically, your script is broken; you should either do this:
<?php
$data = "";
$fp = fopen("http://....");
do {
$chunk = fread($fp, 8192);
if (strlen($chunk) == 0) {
break;
}
$data .= $chunk;
} while (true);
fclose($fp);
?>
this:
<?php
$data = file_get_contents("http://...");
?>
or this:
<?php
copy("http://...", tempnam("", "gd"));
?>
I'm making this a documentation problem, because the fread() manual
page has never mentioned this fact, despite it being the behaviour
since forever.
One final note; the file_get_contents() and copy() functions were
themselves suffering from a similar problem to that of your script;
I've committed a fix to CVS, so you need to either use the fread() loop
approach, or get the next stable snapshot (due in an hour or so).
------------------------------------------------------------------------
[2003-05-22 08:13:07] derick@php.net
It just looks like your image is broken, can you put up a runnable
script + image in a tarball (or send it to me by mail) to verify?
Derick
------------------------------------------------------------------------
[2003-05-22 06:15:23] rryda at mgedata dot cz
More info:
- PHP is run as CGI
- using original windows binary pack
- php_gd2.dll from original windows binary pack
- web server: Apache 2.0.45
Imagecreatefrompng() is used in following code:
//$image_file_url ... URL to the source 24-bit PNG file
$image_base = ImageCreateTrueColor($map_width, $map_height);
$white = ImageColorExact($image_base, 255, 255, 255);
ImageFill($image_base, 0, 0, $white);
// ........
$input = fopen($image_file_url, "rb");
$image_data = fread($input, 2000000);
fclose($input);
$image_file = tempnam("", "gd".rand(0, 10000));
$output = fopen($image_file, "w+b");
fwrite($output, $image_data);
fclose($output);
$image_tmp = ImageCreateFromPNG($image_file); // ERROR
// ........
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/23747
--
Edit this bug report at http://bugs.php.net/?id=23747&edit=1