【问题标题】:Apache/PHP unable to execute convert even when called with an absolute path即使使用绝对路径调用 Apache/PHP 也无法执行转换
【发布时间】:2014-10-23 03:18:10
【问题描述】:

我遇到了一个非常奇怪的问题,对此我没有任何解释。

在使用 XAMPP 设置 OS X Yosemite 和我的本地开发环境后,我通过 MacPorts 安装了 ImageMagick。一切都很好,它在命令行上运行得非常好。

但是,当通过 Apache 执行并通过 PHP 调用时,我没有任何输出。

我进行了广泛的研究并找到了多种方法:

  • 在 Apache 中设置路径环境变量(我试过了)
  • 使用可执行文件的绝对路径(我这样做)
  • 检查exec() 是否被列为禁用功能(它不是)
  • 检查convert 是否甚至可以调用,就像在可执行文件中一样(它是)

我什至将convert 可执行文件复制到本地项目根目录并尝试exec('./convert'); 但无济于事。我总是从那个电话中完全没有收到任何输出。甚至没有错误消息。不用说,当我通过终端运行相同的东西时,它工作正常。

我也试过了:

  • 致电exec('ls'); 看看是否有任何问题(是的,它工作正常)
  • 调用 exec('which convert');,我根本没有得到任何结果 - 调用没有返回任何内容
  • 致电exec('which ls'); 仔细检查问题是否出在which - 但它工作正常并给我/bin/ls 作为回复。
  • 向可执行文件提供chmod 0777 - 无济于事

无论我尝试或做什么,convert 对 PHP/Apache 来说都是完全无法触及的。

谁能告诉我这是为什么以及如何补救?

【问题讨论】:

    标签: php xampp imagemagick executable osx-yosemite


    【解决方案1】:

    检查 Apache 错误日志,我发现以下消息:

    dyld: Library not loaded: /opt/local/lib/libfreetype.6.dylib Referenced from: /opt/local/bin/convert Reason: Incompatible library version: convert requires version 18.0.0 or later, but libfreetype.6.dylib provides version 15.0.0

    研究表明,有一种常见的方法可以在运行时更改某些适用于 Apache 及其附属进程的环境路径变量。然而,由于我不想那样摆弄,我选择了一种更原始​​的方法:

    我打开了一个终端并进入了我系统的根目录。我跑了:

    find . -name "libfreetype.6.dylib"
    

    这给了我系统上所有可用的libfreetype.6.dylib 文件。其中一个在 XAMPP lib 目录中,另一个在 /usr/local/lib 中。

    我将文件备份到XAMPP目录中,然后从/usr/local/lib那里复制一个。

    然后我通过 Apache 再次测试了convert,并得到了另一个与libexpat.1.dylib 非常相似的错误消息。为此,我重复了上述复制过程。之后convert可以通过Apache执行,问题就解决了。

    【讨论】:

      【解决方案2】:

      当您通过 Web 服务器运行脚本和程序时,它们是由不同的用户运行的。在 Mac 中,这通常是 _www。找不到convert 应用程序,因为其可执行文件的路径(可能是/usr/local/bin)未包含在该用户的$PATH 环境设置中。

      最简单的解决方案就是在命令前加上convert的路径,即exec('/usr/local/bin/convert ... ');

      【讨论】:

      • 谢谢,但如果你仔细阅读我的问题,你会发现我已经尝试过了,但没有成功。
      • @SquareCat 抱歉,错过了。也许你受到了 PHP 的限制。将 error_reporting(E_ALL); 放在 PHP 文件的顶部。还要检查 Apache 错误日志。
      • 我不知道我怎么会错过检查这些日志。当然,这就是我找到解决方案的地方。应该指出的是,正是您的建议使我走上了正轨。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多