LoginSignup
0
0

More than 1 year has passed since last update.

AlmaLinux9 + PHP7.4でMongoDBを使う(初期設定及び使い方)

Posted at

はじめに

MongoDBの公式サイトに書かれている内容を実際に試してみました.

  • MongoDB PHP Driver(mongodb-1.14.1)の導入
  • MongoDB PHP Library(mongodb-php-library-1.13)の導入
  • PHPから実際に書き込み/読み込み

なお,以下の記事の通り,AlmaLinux9にMongoDBをインストール済みの状態を前提とします.

また,以下の記事を参考にLAMP環境を構築済みの状態です.

前提条件

  • AlmaLinux 9.0
  • Apache 2.4.51
  • PHP 7.4.32
  • MongoDB 6.0.2

MongoDB PHP Driverの導入

1. 必要なライブラリのインストール

後々要求されるので,必要なライブラリをあらかじめ入れておきます.
調べた限り,環境によっては他にも色々要求されることがあるみたいです.

sudo dnf install php-devel php-pear

2. peclでインストール

公式に書いてある通り,peclを用いてドライバーのインストールをします.

sudo pecl install mongodb

...
Build process completed successfully
Installing '/usr/lib64/php/modules/mongodb.so'
install ok: channel://pecl.php.net/mongodb-1.14.1
configuration option "php_ini" is not set to php.ini location
You should add "extension=mongodb.so" to php.ini

4. php.iniの編集

先ほどの出力結果に書いてあったとおり,php.iniに加筆しないと動きません.
ちなみに昔はファイル名がmongo.soだったらしく,調べると結構その時の記事がヒットして混乱しました(一敗).

sudo vim /etc/php.ini
php.ini
#最終行に加筆
extension = mongodb.so

加筆したら,apacheとphpを再起動しておきます.

sudo systemctl restart httpd
sudo systemctl restart php-fpm

PHP Liblaryの導入

1. Composerのインストール

composerのインストール方法はいくつかあるみたいですが,今回はwgetを使う方法でやってみます.

wgetが無い場合は,あらかじめインストールしておきます.

sudo dnf install -y wget

composerのインストーラーをwgetを使ってとってきます.

wget https://getcomposer.org/installer -O composer-installer.php

インストール先を指定して,インストールします.
/usr/local/binにする場合と,/usr/binにする場合があるようで,今回はどのユーザーでも使えるように/usr/binにしました.

php composer-installer.php --filename=composer --install-dir=/usr/bin

インストールできているか確認します.

composer --version

Composer version 2.4.3 2022-10-14 16:56:41

2. PHP Libraryのインストール

まず,自身のサイトのルートディレクトリに移動します.

#自身の環境によって変えてください
cd /var/www/html

公式サイトにあるインストールコマンドを打ちます.

composer require mongodb/mongodb

インストールされたか確認します.

composer show -i

...
jean85/pretty-package-versions 2.0.5   A library to get pretty versions strings of installed dep...
mongodb/mongodb                1.13.1  MongoDB driver library
symfony/polyfill-php80         v1.26.0 Symfony polyfill backporting some PHP 8.0+ features to lo...

PHPからの書き込み/読み込みテスト

では,実際にDriverとLibraryを使ってMongoDBへのInsert/Findを試してみます.

テスト用のPHPを作成します.

test1.php
<?php

require './vendor/autoload.php';
$collection = (new MongoDB\Client("mongodb://(ユーザー名):(パスワード)@localhost:27017"))->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());
?>
test2.php
<?php

require './vendor/autoload.php';
$collection = (new MongoDB\Client("mongodb://(ユーザー名):(パスワード)@localhost:27017"))->test->users;

$document = $collection->findOne(['name' => 'Admin User']);

var_dump($document);
?>

これらを,/var/www/html/に置いて,アクセスしてみます.

test1.php
Inserted 1 document(s) object(MongoDB\BSON\ObjectId)#4 (1) { ["oid"]=> string(24) "635031d090dcd973ee0fa812" }

--

test2.php
object(MongoDB\Model\BSONDocument)#14 (1) { ["storage":"ArrayObject":private]=> array(4) { ["_id"]=> object(MongoDB\BSON\ObjectId)#13 (1) { ["oid"]=> string(24) "635031d090dcd973ee0fa812" } ["username"]=> string(5) "admin" ["email"]=> string(17) "admin@example.com" ["name"]=> string(10) "Admin User" } }

--
それぞれちゃんと動作しているようです.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0