MongoDBをMAMP環境のPHPで利用する
せっかくMongoDBを入れたので、MAMP環境のPHPでも使えるようにしてみます。
MAMPにはPHP5.3系と5.2系が入っています。それからOS XにもPHPが入っています。これをごっちゃにしたままにすると、不必要なextensionやpearが入ってしまい、後から混乱する原因になりますので、これを意識しつつextensionを入れていきます。
MAMPのPHPにも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
お疲れ様でした。