Mac OS X 10.5 - MAMP+ImageMagick
MAMPのインストール
MacBookでPHP+MySQLのテストをしたかったので、MAMP1.7.2 をインストールしました。
MAMPのインストールは、簡単なので内容は省略。
次に、以前別の環境で動いていたPHPコードを動かしたら、エラーが…。*1
sh: convert: command not found
そうだ、exec関数で、ImageMagick を 呼び出してたんだ。
インストールしなきゃ。
インストール方針
OSXにオープンソースなソフトウェアをインストールするには、いろいろ選択肢*2があるようですね。
1.ゴリゴリ派*3
2.パッケージ管理ツール派
1)MacPorts
2)Fink
2の2)Finkを選択。
さらに、バイナリインストールか、ソースインストールか。
まずは、簡単なバイナリインストールで。無理だったらソースインストールにする、というスタンスにしました。
Fink、ImageMagickインストール
初めての方にお勧めするというFinkのインストール説明*4にしたがって、「Fink 0.9.0 バイナリインストーラ (Intel) 」をダウンロードして、インストール。
いろいろ書いてあって試したけれど、最新のバイナリインストーラがインストール出来れば、とりあえずはいいのかな。
ImageMagick は、コマンドラインから
fink install imagemagick
で、OK。
MAMPのバグ!?
再度、PHPコードを動かしてみると、次はこんなエラーが…。
dyld: Symbol not found: __cg_jpeg_resync_to_restart
Referenced from: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO
Expected in: /Applications/MAMP/Library/lib/libjpeg.62.dylib
ライブラリがうまくリンク出来てない、って意味でしょうか。
調べまくった末に行き着いた先は、MAMPのフォーラム。
(注.翻訳させてるので開くのが遅いです。英語が得意な方は、原文でどうぞ)
2007年3月13日午後6時30分のアダムさんのコメントに注目。
Here is something you can do that may help you out.
Comment out the 2 lines in the file /Applications/MAMP/Library/bin/envvars:DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATHso that they read:
#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#export DYLD_LIBRARY_PATHand restart Apache? There is probably some fine tuning necessary but it should help in many cases.
Please let us know if it works for you.
「/Applications/MAMP/Library/bin/envvarsというファイルのライブラリパスの指定をコメントアウトして、Apacheを再起動すれば、いいかもよ。」
ってことかな、と思って試してみるとエラーなし。ImageMagickもちゃんと実行できてた!
遠い空の下のアダムさんに感謝!!
追記:
ところで、この envvars って何なんだろう、と気になって調べました。
分かったのは、MAMPがapacheを起動するまでの仕組み(一部)。
- /Applications/MAMP/bin/start.sh が実行される。
つまり、apache起動前に環境変数の設定をするのが目的のようです。*5
apacheの設定ファイル(httpd.conf)でも、環境変数の設定とか引き渡しがあるけれど、こうやってもいいのですね。
意味が分かったから、envvars の最後に
PATH=$PATH:/sw/bin
と追加して、apacheを再起動しました。
phpinfo で、Apache Environment の PATH を確認すると、/sw/bin が追加されています。
これで、絶対パスで指定しなくてもよくなります。すっきり。