我有一个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问题,因为我认为上述原因与此无关
答案 0 :(得分:1)
首先想到的是权限问题。 检查目标目录的权限。确保imagemagick可以实际保存文件。
请记住,从http服务器运行的PHP运行的权限与从命令行运行的权限不同。
DC
答案 1 :(得分:1)
您是否可以通过HTTP检索其他资源?
如果没有,那么服务器可能启用了防火墙,这阻止了访问(正如您提到的PHP file_get_contents()函数也失败了。)
如果您能够通过HTTP检索其他资源,那么您尝试从中获取图像的服务器可能会因某些原因阻止您访问。
同样重要的是要注意,对exec的任何调用都将以与PHP相同的用户身份运行程序,因此请确保用户PHP运行时没有任何权限问题。
答案 2 :(得分:1)
相反不直观的是,必须使用xml支持编译imagemagick才能加载远程图像。因此,Gentoo用户需要启用 xml useflag。