views:

217

answers:

3

Hi

I have a php script, which downloads, rescales and stores an image using the following command:

exec('convert -sample 100x100 http://someurl.com/pic.jpg images/somename.jpg');

It all worked fine until I put it on a different server (this one's gentoo, if that makes any difference. Apparently convert won't grab remote images, and if I feed it a url like above it returns
convert: missing an image filename 'images/somename.jpg' @ convert.c/ConvertImageCommand/2822.

I checked the use flags but nothing seems to relate to remote images...The new server is a local machine which I have root access to, so I can pretty much do whatever on it - so how can I make this work?

Another possibly related issue is that php's file_get_contents() won't get remote files from there either. Maybe it's a system-wide setting somewhere preventing binaries from getting remote files? Has anyone had an issue like this before? How did you solve it?

Thanks,
Mala

Update: To clarify
This problem (imagemagick) has nothing to do with PHP. It's on my laptop which can access the internet just fine, and is not related to firewalls. If I open up a shell and type
convert -sample 100x100 http://someurl.com/pic.jpg images/somename.jpg
it fails with the above error without even trying to access the internet. 'wget' on the other hand, as well as web-browsers etc work just fine. On other systems, the convert command when typed into a shell works with no errors.

Please disregard the file_get_contents problem as I believe it is not related for the reasons above

A: 

The first thing that comes to mind is a permission problem. Check the permissions on the target directory. make sure imagemagick can actually save files there.

Remember that PHP run from the http server runs with different permissions than running from the commandline.

DC

DeveloperChris
+1  A: 

Are you able to retrieve other resources via HTTP?

If not then the server likely has a firewall enabled which is preventing access (as you mentioned PHP file_get_contents() function fails also).

If you are able to retrieve other resources via HTTP then the server you're attempting to grab the image from could be blocking you access for some reason.

Its also important to note that any calls to exec will run the program as the same user as PHP, so make sure the user PHP runs as does not have any permission issues.

Inspire
Thanks for your input =) The problem in question (convert) isn't related to PHP, nor am I behind draconian firewalls that prevent HTTP requests (please see my update). Any other ideas?
Mala
A: 

Rather unintuitively, imagemagick must be compiled with the xml support in order to load remote images. Thus, Gentoo users will need to enable the xml useflag.

Mala