MongoDBをMAMP環境のPHPで利用する

せっかくMongoDBを入れたので、MAMP環境のPHPでも使えるようにしてみます。
MAMPにはPHP5.3系と5.2系が入っています。それからOS XにもPHPが入っています。これをごっちゃにしたままにすると、不必要なextensionやpearが入ってしまい、後から混乱する原因になりますので、これを意識しつつextensionを入れていきます。
MAMPPHPにもpearおよびpeclは入っていますが、これを単に実行するとデフォルトで入っている設定を読み込んでしまうので、下記のように-cオプションを付けて実行します。

$ cd /Applications/MAMP/bin/php/php5.3.6/bin
$ ./pear -c ../conf/pear.conf <pear コマンド>
$ ./pecl -c ../conf/pear.conf <pecl コマンド>

以下のエラーが出る場合、下記のエントリからpearをちゃんと設定しておきます。

$ ./pecl
Notice: unserialize(): Error at offset 276 of 1227 bytes in Config.php on line 1050
ERROR: The default config file is not a valid config file or is corrupted.

MAMPのPEARを「ちゃんと」設定する方法(pearコマンドが動かないのを修正する方法) - ZeBeVogue別館

では早速っと、installコマンドでインストールしようとしてもコンパイルで失敗してしまいます。

$ ./pecl -c ../conf/pear.conf install mongo
...
/private/tmp/pear/temp/mongo/php_mongo.c:22:10: fatal error: 'php.h' file not found
#include <php.h>
         ^
1 error generated.
make: *** [php_mongo.lo] Error 1
ERROR: `make' failed

というのは、MAMP環境にはPHPのヘッダファイルが無いからです。

$ ls `./php-config --include-dir`
ls: /Applications/MAMP/bin/php/php5.3.6/include/php: No such file or directory

OS Xのものはありますが、バージョンが異なるため、やはり使えません。

$ ls `php-config --include-dir`
TSRM    Zend    ext     include main

という事で公式サイトから取って来るしかないです。
PHP: Releases

$ wget http://museum.php.net/php5/php-5.3.6.tar.bz2 && tar zxf php-5.3.6.tar.bz2
$ cd php-5.3.6
$ ./configure
...
+--------------------------------------------------------------------+
| License:                                                           |
| This software is subject to the PHP License, available in this     |
| distribution in the file LICENSE.  By continuing this installation |
| process, you are bound by the terms of this license agreement.     |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.                            |
+--------------------------------------------------------------------+

Thank you for using PHP.

バイナリを作る必要はないので、configureだけでOKです。終わったら、このディレクトリ自体をincludeディレクトリに配置します。不要なファイルも入っていますが。

$ cd ..
$ mv php-5.3.6 /Applications/MAMP/bin/php/php5.3.6/include/php

これでドライバがコンパイルできるようになります。

$ ./pecl -c ../conf/pear.conf install mongo
...
Build process completed successfully
Installing '/Applications/MAMP/bin/php/php5.3.6/lib/php/extensions/no-debug-non-zts-20090626/mongo.so'
install ok: channel://pecl.php.net/mongo-1.2.10
configuration option "php_ini" is not set to php.ini location
You should add "extension=mongo.so" to php.ini

一応確認してみます。

$ ls `./php-config --extension-dir`/mongo*
/Applications/MAMP/bin/php/php5.3.6/lib/php/extensions/no-debug-non-zts-20090626/mongo.so

ちゃんと出来上がっているようです。後はphp.iniに追加するだけです。

$ echo "extension=mongo.so" >> /Applications/MAMP/bin/php/php5.3.6/conf/php.ini
$ ./php -i | grep -i mongo
mongo
MongoDB Support => enabled
mongo.allow_empty_keys => 0 => 0
mongo.allow_persistent => 1 => 1
mongo.auto_reconnect => 1 => 1
mongo.chunk_size => 262144 => 262144
mongo.cmd => $ => $
mongo.default_host => localhost => localhost
mongo.default_port => 27017 => 27017
mongo.is_master_interval => 60 => 60
mongo.long_as_object => 0 => 0
mongo.native_long => 0 => 0
mongo.no_id => 0 => 0
mongo.ping_interval => 5 => 5
mongo.utf8 => 1 => 1

お疲れ様でした。