我在MAMP中通过PHP的exec()
命令在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
N.B。 ffmpeg是通过Macports安装的。
它可以从命令行运行。
怎么办?
修改
我重新打开了这个 - 最初认为shell_exec()
解决了这个问题,但事实上它应该被称为不同 - 我直到今天进一步调查才意识到。这是我的代码使用shell_exec并仍然给出上面的错误:
$cmd = '/opt/local/bin/ffmpeg -h';
$cmd = escapeshellcmd($cmd) . ' 2>&1';
$output = shell_exec($cmd);
var_dump($output);
答案 0 :(得分:30)
问题是在MAMP中设置了DYLD_LIBRARY_PATH,我已经通过macport安装了ffmpeg。
这可能不是最好的解决办法,但它让我现在正在运行:
在/Applications/MAMP/Library/bin/envvars
文件中,注释以下行:
#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#export DYLD_LIBRARY_PATH
并重启Apache
答案 1 :(得分: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的,那么你就不会破坏它。
答案 2 :(得分:0)
使用命令行时,确保PHP的exec
使用与您相同的shell。
可能shell_exec
Docs有帮助。
另见php shell_Exec not working while the command works in shell。