imagemagick无法加载远程图像

时间:2010-01-07 07:25:39

标签: php linux file

我有一个php脚本,使用以下命令下载,重新缩放和存储图像:

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

这一切都运行良好,直到我把它放在另一台服务器上(这个gentoo,如果这有任何区别。显然转换不会抓取远程图像,如果我提供它像上面的URL它返回
convert: missing an image filename 'images/somename.jpg' @ convert.c/ConvertImageCommand/2822.

我检查了使用标志,但似乎没有任何东西与远程图像有关...新服务器是我有root权限的本地机器,所以我几乎可以做任何事情 - 所以我怎么能做这个工作?

另一个可能相关的问题是php的file_get_contents()也不会从那里获取远程文件。也许这是一个系统范围的设置,防止二进制文件获取远程文件?以前有人有这样的问题吗?你是怎么解决的?

谢谢,
马拉

更新:澄清
这个问题(imagemagick)与PHP无关。它在我的笔记本电脑上可以很好地访问互联网,与防火墙无关。如果我打开一个shell并输入
convert -sample 100x100 http://someurl.com/pic.jpg images/somename.jpg
如果没有尝试访问互联网,它会因上述错误而失败。另一方面,'wget'以及网络浏览器等工作得很好。在其他系统上,当键入shell时,convert命令没有错误。

请忽略file_get_contents问题,因为我认为上述原因与此无关

3 个答案:

答案 0 :(得分:1)

首先想到的是权限问题。 检查目标目录的权限。确保imagemagick可以实际保存文件。

请记住,从http服务器运行的PHP运行的权限与从命令行运行的权限不同。

DC

答案 1 :(得分:1)

您是否可以通过HTTP检索其他资源?

如果没有,那么服务器可能启用了防火墙,这阻止了访问(正如您提到的PHP file_get_contents()函数也失败了。)

如果您能够通过HTTP检索其他资源,那么您尝试从中获取图像的服务器可能会因某些原因阻止您访问。

同样重要的是要注意,对exec的任何调用都将以与PHP相同的用户身份运行程序,因此请确保用户PHP运行时没有任何权限问题。

答案 2 :(得分:1)

相反不直观的是,必须使用xml支持编译imagemagick才能加载远程图像。因此,Gentoo用户需要启用 xml useflag。