【Ubuntu】PHPからMongoDBに接続する

【Ubuntu】PHPからMongoDBに接続する サーバー

「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にも慣れるでしょう。
ちょっとクセはありますが、理解できないモノではありません。

「習うより慣れろ」の精神でどんどんと数をこなしていくだけです。
そうすれば、違和感なくコーディングできるようになっているでしょう。

以上、動作確認(データ登録・データ取得)の説明でした。

タイトルとURLをコピーしました