【问题标题】:imagemagick unable to load remote imagesimagemagick 无法加载远程图像
【发布时间】:2023-04-05 13:18:01
【问题描述】:

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

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

一切正常,直到我把它放在不同的服务器上(这个是 gentoo,如果这有什么不同的话。显然转换不会抓取远程图像,如果我给它提供一个像上面这样的 url,它会返回
@ 987654322@

我检查了使用标志,但似乎与远程图像无关...新服务器是一台本地机器,我可以访问它,所以我几乎可以在上面做任何事情 - 那么我怎样才能使这项工作?

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

谢谢,
马拉

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

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

【问题讨论】:

  • 虽然我可以通过两步 wget -> 转换过程来解决问题,但我想避免这种情况:我不想处理时间问题和制作 shell 脚本,等等。Imagemagick 可以加载远程图像,所以我想使用这个功能而不是仅仅解决问题。
  • 您需要重新编译 ImageMagick(首先)和 PHP(最后)。我不会说 Gentoo,所以我不知道正确的咒语,但我会开始在构建配置文件中查找选项。
  • 'convert' 从 shell 调用时仍然无法获取文件,所以我认为它与 php 没有任何关系... ImageMagick 中的构建选项似乎都没有处理远程文件:-\
  • 远程服务器是否“看到”互联网?尝试从服务器控制台 ping 一些网页
  • 问题不在远程机器上,而是在本地机器上(即我在笔记本电脑上镜像网站)。它可以很好地看到互联网(我现在就在上面),但 imagemagick 似乎出于某种原因不想解析 url...

标签: php linux file


【解决方案1】:

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

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

直流

【讨论】:

    【解决方案2】:

    您是否能够通过 HTTP 检索其他资源?

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

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

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

    【讨论】:

    • 感谢您的输入 =) 有问题的问题(转换)与 PHP 无关,我也不在阻止 HTTP 请求的严苛防火墙后面(请参阅我的更新)。还有其他想法吗?
    【解决方案3】:

    相当不直观,为了加载远程图像,必须使用 xml 支持编译 imagemagick。因此,Gentoo 用户需要启用 xml 使用标志。

    【讨论】:

      猜你喜欢
      • 2020-11-15
      • 2020-02-16
      • 1970-01-01
      • 2018-11-11
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多