「PHPからMongoDBに接続したい」
「UbuntuでMongoDBドライバーを簡単にインストールしたい」
「PECLでMongoDBドライバーをインストールできない・・・」
このような場合には、この記事の内容が参考となります。
この記事では、PHPからMongoDBに接続する方法を解説しています。
本記事の内容
- MongoDBドライバーのインストールができない?
- MongoDBドライバーのインストール
- MongoDBドライバーの設定
- MongoDB接続ライブラリのインストール
- 動作確認(データ登録・データ取得)
それでは、上記に沿って解説していきます。
MongoDBドライバーのインストールができない?
今回の記事では、Ubuntu・Debianを対象OSとしています。
そして、MongoDBがインストール済であることが条件となります。
もちろん、ApacheやPHPが動くことも前提です。
通常は、PECLを用いてMongoDBのドライバーをインストールします。
コマンドは、以下になります。
pecl install mongodb
しかし、この記事ではPECLを使わない方法を説明します。
その理由の一つには、PECLが古い技術ということがあります。
デフォルトでは、PECLはUbuntuにインストールされていません。
なお、PECLはPEARをインストールすれば利用可能になります。
(※ここでは、PECLとPEARは同じと捉えて問題ありません)
ただ、PECLでMongoDBドライバーをインストールできないケースがあります。
その理由は、以下。
PEARのバージョンが古いと、最近のMongoDBのドライバーはインストールできません。
実際に以下のバージョンでは、インストールができませんでした。
$ pear version PEAR Version: 1.10.9 PHP Version: 7.4.9 Zend Engine Version: 3.4.0 Running on: Linux linuxubuntu 5.8.0-63-generic #71-Ubuntu SMP Tue Jul 13 15:59:12 UTC 2021 x86_64
それならと、PEARのバージョンを上げようと試みました。
しかし、依存関係の問題からかバージョンアップができません。
そもそも、PEARは歴史がある技術です。
また、メンテナンスもそこまで行き届いている状況ではありません。
そのような事情もあるのでしょう。
よって、PECLによるMongoDBドライバーのインストールは諦めます。
以下では、別の方法でMongoDBドライバーを取得します。
MongoDBドライバーのインストール
php-mongodbというパッケージが、存在しています。
Ubuntu・Debianなら、これを利用しましょう。
$ sudo apt show php-mongodb Package: php-mongodb Version: 1.7.4-1 Priority: optional Section: universe/php Origin: Ubuntu Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Original-Maintainer: Debian PHP PECL Maintainers <team+php-pecl@tracker.debian.org> Bugs: https://bugs.launchpad.net/ubuntu/+filebug Installed-Size: 1,386 kB Provides: php7.4-mongodb Pre-Depends: php-common (>= 2:69~) Depends: ucf, phpapi-20190902, libc6 (>= 2.17), libsasl2-2 (>= 2.1.27+dfsg), libssl1.1 (>= 1.1.0) Homepage: https://pecl.php.net/package/mongodb Download-Size: 449 kB APT-Manual-Installed: yes APT-Sources: http://archive.ubuntu.com/ubuntu groovy/universe amd64 Packages Description: MongoDB driver for PHP The purpose of this driver is to provide exceptionally thin glue between MongoDB and PHP, implementing only fundemental and performance-critical components necessary to build a fully-functional MongoDB driver.
対象となるのは、バージョン1.7.4です。
それほど、古いバージョンではありません。
では、このパッケージをインストールします。
インストールに利用したのは、以下のコマンドです。
$ sudo apt-get install php-mongodb
これだけでさくっとMongoDBドライバーが、インストールできます。
確認しておきます。
$ ls /usr/lib/php/20190902 | grep mongo mongodb.so
ちゃんとモノが、存在していますね。
では、次はMongoDBドライバーの設定を行います。
MongoDBドライバーの設定
通常なら、php.iniに以下の記述を追加します。
extension=mongodb.so
しかし、今回はその必要がありません。
「/etc/php/7.4/apache2/conf.d」の下に、「/etc/php/7.4/apache2/conf.d/20-mongodb.ini」が存在しています。
「/etc/php/7.4/apache2/conf.d/20-mongodb.ini」の内容は、以下。
$ cat /etc/php/7.4/apache2/conf.d/20-mongodb.ini extension=mongodb.so
ここまで「php-mongodb」のインストールで実施されています。
便利ですね。
では、あとはApacheの再起動だけしておきます。
$ sudo systemctl restart apache2
これでphpinfoにも出てきます。
ここまで確認できれば、MongoDBドライバーの設定は完了です。
次は、PHPから接続するために必要となるライブラリをインストールします。
MongoDB接続ライブラリのインストール
Composerを使って、接続ライブラリをインストールします。
Composerのインストールは、次の記事で説明しています。
接続ライブラリは、次のコマンドでインストールできます。
$ composer require mongodb/mongodb
問題なくインストールできました。
composer.jsonを確認しておきます。
$ cat composer.json { "require": { "mongodb/mongodb": "^1.6" } }
インストールしたMongoDBドライバーのバージョンが、1.7.4でした。
1.6以降が要件であり、今回はクリアということです。
以上、MongoDB接続ライブラリのインストールを説明しました。
次は、動作確認(データ登録・データ取得)を行います。
動作確認(データ登録・データ取得)
MongoDBは、起動しておきます。
$ sudo systemctl start mongod
動作確認は、以下の2つの処理を行います。
- データ登録
- データ取得
下記でそれぞれを説明します。
データ登録
データ登録(挿入)のコードは、以下。
<?php require 'vendor/autoload.php'; // include Composer's autoloader $client = new MongoDB\Client("mongodb://localhost:27017"); $collection = $client->test->users; $insertOneResult = $collection->insertOne([ 'username' => 'admin', 'email' => 'admin@example.com', 'name' => 'Admin User', ]); printf("Inserted %d document(s)\n", $insertOneResult->getInsertedCount()); var_dump($insertOneResult->getInsertedId()); ?>
上記を実行して、問題なければ以下のように表示されます。
Inserted 1 document(s) object(MongoDB\BSON\ObjectId)#14 (1) { ["oid"]=> string(24) "61bfb55e2106e76d56482422" }
データ取得
上記で登録したデータを取得してみましょう。
<?php require 'vendor/autoload.php'; // include Composer's autoloader $client = new MongoDB\Client("mongodb://localhost:27017"); $collection = $client->test->users; $cursor = $collection->find(['username' => 'admin']); foreach ($cursor as $document) { var_dump($document); } ?>
上記を実行して、問題なければ以下のように表示されます。
object(MongoDB\Model\BSONDocument)#15 (1) { ["storage":"ArrayObject":private]=> array(4) { ["_id"]=> object(MongoDB\BSON\ObjectId)#7 (1) { ["oid"]=> string(24) "61bfb55e2106e76d56482422" } ["username"]=> string(5) "admin" ["email"]=> string(17) "admin@example.com" ["name"]=> string(10) "Admin User" } }
まとめ
プログラムでのDB処理に慣れていれば、すぐにMongoDBにも慣れるでしょう。
ちょっとクセはありますが、理解できないモノではありません。
「習うより慣れろ」の精神でどんどんと数をこなしていくだけです。
そうすれば、違和感なくコーディングできるようになっているでしょう。
以上、動作確認(データ登録・データ取得)の説明でした。