10

我通过 PHP 的exec()命令在 MAMP 中的 Mac OSX 10.7.3 上使用 ffmpeg,我设置了一个绝对路径来调用 ffmpeg,例如

/opt/local/bin/ffmpeg -i "/sample.avi"

但我收到以下错误 -

dyld: Library not loaded: /opt/local/lib/libjpeg.8.dylib  Referenced from: /opt/local/lib/libopenjpeg.1.dylib  Reason: Incompatible library version: libopenjpeg.1.dylib requires version 13.0.0 or later, but libJPEG.dylib provides version 12.0.0

注意 ffmpeg 是通过 Macports 安装的。

它从命令行工作。

该怎么办?

编辑

我重新打开了这个 - 最初认为shell_exec()解决了这个问题,但实际上它应该被称为不同的 - 我直到今天进一步调查才意识到。这是我使用 shell_exec 的代码,但仍然出现上述错误:

 $cmd = '/opt/local/bin/ffmpeg -h';
 $cmd = escapeshellcmd($cmd) . ' 2>&1';
 $output = shell_exec($cmd);
 var_dump($output);
4

3 回答 3

30

问题是 DYLD_LIBRARY_PATH 是在 MAMP 中设置的,我已经通过 macports 安装了 ffmpeg。

这可能不是最好的解决方案,但它现在让我启动并运行:

/Applications/MAMP/Library/bin/envvars文件中并注释以下行,如下所示:

#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#export DYLD_LIBRARY_PATH

并重新启动 Apache

于 2012-04-12T14:22:28.180 回答
2

注释掉该行将#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"在短期内起作用,但它可能会破坏其他事情,因为您要删除 MAMP 用来告诉服务器将其库保存在何处的行。

更好的解决方案是将行更改为:

DYLD_LIBRARY_PATH="/usr/local/lib:/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"

所以你只是/usr/local/lib:在已经给定的路径之前。这告诉 Apache 首先查看/usr/local/lib,然后如果这不起作用,则查看/Applications/MAMP/Library/lib.

因此,如果您通过 Brew 安装某些东西,并且有两个版本,它会先查看您使用 Brew 安装的版本,然后再使用 MAMP 附带的任何版本,这很可能已过时。但是,如果它只是 MAMP 附带的,您没有单独安装或者是特定于 MAMP 的,那么您不会破坏它。

于 2013-10-09T15:52:51.133 回答
0

exec当您使用命令行时,确保 PHP使用与您相同的 shell。

shell_exec文档可能会有所帮助。

参见php shell_Exec not working while the command works in shell

于 2012-04-11T14:24:48.040 回答