10

PHPのコマンドを使用してMAMPのMacOSX10.7.3でffmpegを使用してexec()いますが、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

NBffmpegは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を介して何かをインストールし、2つのバージョンがある場合、MAMPに付属しているものを使用する前に、最初にBrewでインストールしたものを調べます。これは、古くなっている可能性が高いです。ただし、MAMPにのみ付属しているもの、個別にインストールしていないもの、またはMAMP固有のものである場合は、破損することはありません。

于 2013-10-09T15:52:51.133 に答える
0

execコマンドラインを使用するときは、PHPが同じシェルを使用していることを確認してください。

おそらくshell_execドキュメントが役立ちます。

コマンドがシェルで機能している間、phpshell_Execが機能しないことも参照してください。

于 2012-04-11T14:24:48.040 に答える