犬ターネット

MongoDB + PHP

2013-01-07 mongodb php

環境は Windows 7 + PHP 5.3系 + MongoDB 1.8.5。

MongoDB インストール

http://www.mongodb.org/downloads から Windows 64-bit ver1.8.5 をダウンロード。

解凍してできたディレクトリを mongodb にリネームして C:\mongodb に配置。

データディレクトリを C:\mongodb\data に作成。

コマンドプロンプとから以下実行で起動。終わり。

C:\mongodb\bin\mongod.exe --dbpath C:\mongodb\data

別コマンドプロンプトから以下実行して接続。

> C:\mongodb\bin\mongo.exe
MongoDB shell version: 1.8.5
connecting to: test
>

試しにデータを登録してみる。大丈夫そう。

> db.test.save( {a:1} )
> db.test.find()
{ "_id" : ObjectId("50ea4dc0178846492bdb8b43"), "a" : 1 }

PHP から mongoDB 触る

https://github.com/mongodb/mongo-php-driver/downloads から DLL をダウンロード、php.ini に「extension=php_mongo.dll」を追加。

まず mongoDB に データベースと認証用ユーザ作っておく。データベース名は mgng、ユーザ名は dbuser、パスワードは password。以下コマンドラインから実行。

> C:\mongodb\bin\mongo.exe
MongoDB shell version: 1.8.5
connecting to: test
> use mgng
switched to db mgng
> db.addUser("dbuser","password")
{
    "user" : "dbuser",
    "readOnly" : false,
    "pwd" : "031cdfcc530b919b7f77efb400f250b7"
}
> quit()

PHP側はこういうコード。username や password に「@」「:」が含まれた場合のことを考えて、$options で渡すようにしとく。

接続成功すると以下みたいな表示が、

Array
(
    [0] => Array
        (
            [hash] => 127.0.0.1:27017;-;mgng/dbuser/9908c9f0881e9b0b2afbf673040eb9c1;5664
            [server] => Array
                (
                    [host] => 127.0.0.1
                    [port] => 27017
                    [database] => mgng
                    [username] => dbuser
                    [auth_hash] => 9908c9f0881e9b0b2afbf673040eb9c1
                    [pid] => 5664
                )

            [connection] => Array
                (
                    [last_ping] => 1357537085
                    [last_ismaster] => 0
                    [ping_ms] => 0
                    [connection_type] => 1
                    [connection_type_desc] => STANDALONE
                    [max_bson_size] => 16777216
                    [tag_count] => 0
                    [tags] => Array
                        (
                        )

                )

        )

)

接続失敗すると(例えばパスワードが違う場合)以下が表示される。

Failed to connect to: 127.0.0.1:27017: Authentication failed on database 'mgng' with username 'dbuser': auth fails

これから MySQL → MongoDB への移行を考える。


Excelファイルの内容を生PHPで読み込む

1Tのハードディスクを8000円で買った