2011-08-23 10 views
15

私はImaMemagickをLionでHomebrewを使ってインストールしましたが、phpから呼び出されたときには全く機能しません。コンソール:解決済み:Homebrew ImageMagickのインストール後にMAMP Phpがexec( 'convert')できない

$ convert -version 
Version: ImageMagick 6.7.1-1 2011-07-29 Q16 http://www.imagemagick.org 
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC 
Features: OpenMP 

$ which convert 
/usr/local/bin/convert 

PHP:

echo exec ('convert -version'); 

または のexec($出力、 '-versionを変換します'); var_dump($ output);

何も出力しません(または空の配列)。

exec ('/usr/local/bin/convert') // works, but 
exec ('which convert') // doesn't 

これをローカルでテストして、本番環境で変換を検出できることを確認する必要があります。しかし、私はそれを適切にテストすることはできません。 PATHは設定されており、Terminalでは動作しますが、PHPでは動作しません。

解決:PHPはconvertはので、これはそれを解決し/usr/bin/にする必要があります動作するため

は、判明:

ln -s /usr/local/bin/convert /usr/bin/convert 

更新

ここは、MAMPのbecasueました修正は:http://firedevcom.tumblr.com/post/22791937644/fix-for-homebrew-imagemagick-and-mamp

オープン/アプリケーション/ MAMP /ライブラリ/ binに/ envvarsが

そしてコメントアウトし、次の行:

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

を完了。

+1

PHPのパスに変換されますか? exec()コールで '/ absolute/path/to/convert'を指定する必要があるかもしれません。 PHP exec()呼び出しの環境は、シェルプロンプトでの環境と大きく異なることに注意してください。 –

+0

うーん、問題は - すべてがプロダクションサーバーで動作し、自宅では動作しません。私はPATHをエグゼクティブサンドボックスに継承すべきだと思ったのですが、 – firedev

+1

phpのシェル環境は、ユーザーシェル環境とはまったく異なります。それらを直接比較することはできません。 'exec( 'echo $ PATH');'を実行してシェルの動作を確認してください。 PHPはApache環境を継承します。 –

答えて

6

あなたが投票することができますので、ここに私自身の答えを追加:http://firedevcom.tumblr.com/post/22791937644/fix-for-homebrew-imagemagick-and-mamp

オープン/Applications/MAMP/Library/bin/envvars

そしてコメントアウトし、次の行::

それはMAMPによって引き起こされたが、ここでの修正です

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

完了。

+0

ありがとう、それは動作します!!!! – keithics

+0

XAMPP、path:/ Applications/XAMPP/xamppfiles/bin/envvarsでも動作します –

1

変換がサーバーのPATH環境変数であることを確認します。それともフルパスを指定します。

exec('/usr/local/bin/convert -version'); 
+0

これはコンソールのPATHにありますが、phpのexecではありませんが、プロダクションサーバーではすべて正常に動作しているようです。そして私はイメージを自動的に検出できる必要があります。これはLinuxでは動作しますが、自作では動作しません。 – firedev

1

execは空の文字列であることを起こるコマンドの結果から、最後の行を返します。

exec('convert -version', $output); 
var_dump($output); // it is an array which filled with every line of output from the command 
+1

'$ output'にもエラーがある場合は、' exec( 'convert -version 2>&1'、$ output); 'を使います。 – arnaud576875

+0

もちろん、私もvar_dumpを使っていますが、何も返されません。 – firedev

+1

変換のフルパスはどうですか? – xdazz

2
sudo ln -s /usr/local/bin/convert /usr/bin/convert 
+0

あなたは私を救った!これで、絶対パスを含めずにexecコマンドを使うことができます。 –

1

単にそれはランタイム上のPATHに変換する追加しますexec("PATH=\$PATH:/usr/local/bin; convert file.pdf file.png");を使用する:あなたは出力を取得したい場合は は、ちょうどこのような何かを行います。

+0

これは私が必要とするものです。しかし、ここで私は私の生きているマシンにPATHを必要としないので、私のPHPコードでトリックを取得する必要があります。このエクスポートパスをグローバルに設定する方法を知っていますか? – workdreamer

1

ただexec( "convert ....")ではなく; フルパスを使用してください。 変換がハッシュされる(は/ opt/local/binに/変換)

が今使用:あなたは

あなたのような何かを得る必要があります変換ターミナル

タイプを入力して、それを得ることができます。

exec( "/ opt/local/bin/convert ...."); 輸出DYLD_LIBRARY_PATH

:そのコメントアウト

DYLD_LIBRARY_PATH = "$のDYLD_LIBRARY_PATH /アプリケーション/ MAMP /ライブラリ/ libに" 後

[@Nikkiにクレジット]

in/Applications/MAMP/Library/bin/envvars

+1

プロジェクトが生産段階に達したら、これは悪い習慣であることがすぐわかります。 – firedev

関連する問題