简体   繁体   中英

creating an image in php, display works, saving to file does not

I am creating an image via a php script using imagepng. This works fine and displays well on the website. even saving-as gives me a valid .png file

header( "Content-type: image/png" );
imagepng($my_img);
$save = "../sigs/". strtolower($name) .".png";
//imagepng($my_img, $save, 0, NULL);
imagepng($my_img, $save);

This is the end part of the code I use to generate the file and return it as picture on the website. but both options (tried the one marked out as well) dont save the file to the webserver for later use. The folder where the file is written is even set to chmod 777 at the moment to rule out any issues on that front. the $name is for sure a valid string without spaces.

Make sure that PHP has permissions to write files to that folder. chmod probably only affects FTP users or particular users.

And try one at a time. ie:

header( "Content-type: image/png" );
imagepng($my_img);

then

$save = "../sigs/". strtolower($name) .".png";
imagepng($my_img, $save);

So that you can isolate errors.

Attempt saving in the same folder as the script first, see if there's any problem.

$save = strtolower($name) .".png";
imagepng($my_img, $save);

Thanks a lot for you help on clearing my mind and having me look from a different angle. All had to do with rights of the file.

As the script generated the file, the rights are not set correct and overwriting is not possible.

after taking out:

header( "Content-type: image/png" );
imagepng($my_img);

I received an error message about not being able to write. when is set the file manual to chmod 755, the script worked like a charm.

so the new code now looks like this:

header( "Content-type: image/png" );
imagepng($my_img);
$save = "../sigs/". strtolower($name) .".png";
chmod($save,0755);
imagepng($my_img, $save, 0, NULL);
imagedestroy($my_img);

Setting the file to be writeable fixed the issue and all is working as intended.

Best regards Fons

Are you sure the relative path is correct? That can be a bit confusing if that script is called from another script.

You could try to change the path to:

$save = $_SERVER['DOCUMENT_ROOT'] . "/sigs/" . strtolower($name) . ".png";

Edit: And of course check the return value of imagepng() and your error log

Your code, Fons, provoked the usual problem I was having of displaying the Image created using the GD Library but disabling any Html code after the Php. By removing the line below

header( "Content-type: image/png" ); imagepng($image);

and only using the next 2 lines in Php I was able to save the file and then access the Image in the Html section (bottom line of code) without destroying the Html coding.

$save='./img/Graph.png'; chmod($save,0755);
imagepng($image,$save,0,NULL); imagedestroy($image);

<img width="500" height="350" align="top" alt="" src="./img/Graph.png" />

Thanks.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM