PHP7からmongoDBを操作する環境をつくる。
案の定、詳細は先輩方の教えを参考に。
何も考えずこれだけやれば動作環境が手に入るよのメモ。
手順は、以下で作成したVM環境上で検証した
いいからやる。CentOS7 + Apache + MySQL + PHP7
mongoDBをインストールする
以下ルートユーザで作業
- リポジトリを追加する
vi /etc/yum.repos.d/10gen.repo
[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
enabled=1
- インストール
yum install mongo-10gen mongo-10gen-server
- 起動する
service mongod start
- 自動起動設定
chkconfig mongod on
mongoDBにtest用のcollectionを作成する
- DBを作成する
mongo test_db
use test_db
- testというcollectionを作成する
db.createCollection('test');
- collectionにドキュメントを追加する
db.test.insert( { name:'tanaka', address:'tokyo' } );
- 確認
DB一覧表示
show dbs
collection一覧表示
show collections
全件表示(select)
db.test.find();
プロンプト終了
exit
PHPからmongoDBを使えるようにする
- Extensionの一覧を見る
yum --enablerepo=epel,remi,remi-php70 search php70
- mongoDBのExtensionをインストールする
yum --enablerepo=epel,remi,remi-php70 install php70-php-pecl-mongodb
- php.iniに設定を追加する
vi /etc/php.ini
extension=mongodb.so
(手元の環境ではextension_dirの設定ちゃんとしていないのでフルパスで)
(とにかく動く環境がほしいのだ)
extension=/opt/remi/php70/root/usr/lib64/php/modules/mongodb.so
- 確認
httpd再起動
service httpd restart
phpinfo()にmongodbの情報が表示されていればOK
http://192.168.33.10/
サンプルPGで動作確認
- サンプルPG
sample.php
<?php
// DB接続
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
// Insert
$bulk = new MongoDB\Driver\BulkWrite;
$bulk->insert(['name' => '山田', 'address' => '東京']);
$manager->executeBulkWrite('test_db.test', $bulk);
// Select
//$filter = ['address' => ['$gt' => 'tokyo']]; // where句
$filter = [];
$options = [
'projection' => ['_id' => 0],
'sort' => ['_id' => -1],
];
$query = new MongoDB\Driver\Query($filter, $options);
$cursor = $manager->executeQuery('test_db.test', $query);
// Select 結果表示
foreach ($cursor as $document) {
var_dump($document);
}
?>
- 実行結果
- mongoDBの中身
- mongoDB Extensionのドキュメント
他の操作は以下を参考に実装していく
苦労したところ
php7のmongodb拡張は、インターネット上でよく紹介されているpecl install mongo
ではインストールができなかった。
どうしたらいいんだと、ドキュメント読んだり、ぐぐったりで小一時間・・・
現状は自PCに検証環境がほしいだけだったので深追いはしなかった。
本開発するときになったら、そのときはちゃんとする。
また、旧バージョンとは関数名や使い方が変わっていたりで、コード例も読み替えが必要だったりした。