Mac OS X 10.5 - MAMP+ImageMagick

MAMPのインストール

MacBookPHP+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を選択。
さらに、バイナリインストールか、ソースインストールか。
まずは、簡単なバイナリインストールで。無理だったらソースインストールにする、というスタンスにしました。

FinkImageMagickインストール

初めての方にお勧めするという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_PATH

so that they read:

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

and 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 って何なんだろう、と気になって調べました。
分かったのは、MAMPapacheを起動するまでの仕組み(一部)。

  • /Applications/MAMP/bin/start.sh が実行される。
    • /Applications/MAMP/bin/startApache.sh が実行される。
      • /Applications/MAMP/Library/bin/apachectl が実行される。
        • /Applications/MAMP/Library/bin/envvars が実行される。
        • /Applications/MAMP/Library/bin/httpd が実行される。

つまり、apache起動前に環境変数の設定をするのが目的のようです。*5
apacheの設定ファイル(httpd.conf)でも、環境変数の設定とか引き渡しがあるけれど、こうやってもいいのですね。

意味が分かったから、envvars の最後に

PATH=$PATH:/sw/bin

と追加して、apacheを再起動しました。
phpinfo で、Apache Environment の PATH を確認すると、/sw/bin が追加されています。
これで、絶対パスで指定しなくてもよくなります。すっきり。

*1:/Applications/MAMP/logs/apache_error_log

*2:これ以外にあるのかな

*3:必要なファイルをダウンロードしてコンパイル。つまり、もっとも原始的かつ玄人好み

*4:その割に、ちょっと分かりにくい説明なんだけど…

*5:この辺のところが、MAMP PRO では、やりやすくなっているのかなあ。