Windows Tips

WSL (Ubuntu 16.04 TLS) 内で、PHPから MongoDB を操作する環境を作る

投稿日:2018年8月11日 更新日:

WSL (Ubuntu 16.04 TLS) 内で、PHP から MongoDB を操作するための環境を作ります。

PHP から MongoDB を操作してみる」が目的であるため、ウェブサーバーとしては、Apache や nginx は使わず PHP のビルトインサーバーを使います。

1. 環境

  • WSL (Ubuntu 16.04 TLS)

2. PHP から MongoDB を使うための作業

1. MongoDB をインストールする

以下のページに従って、MongoDB 公式パッケージをインストールします。

WSL

WSL (Ubuntu 16.04 TLS) に MongoDB をインストールする

2018.08.10

2. PHP をインストールする

以下のページに従って、PHP 7.2 をインストールします。

PHP

Ubuntu で 複数のバージョンの PHP を使う手順

2018.08.09

3. PHP の MongoDB driver をインストールする

PHP から MongoDB を操作するために専用のドライバをインストールする必要があります。

このドライバーのインストールには、pecl コマンドを使用するため、まず php7.2-dev パッケージをインストールします。

$ sudo apt install php7.2-dev

これで、peclコマンドが使えるようになったはずです。

※ PHP 7.0 の場合は、php-dev もしくは php7.0-dev というパッケージ名だと思います。後ろに “-dev” がついたパッケージです。

そして、MongoDB のドライバをインストールします。

$ sudo pecl install mongodb
(省略)
Build process completed successfully
Installing '/usr/lib/php/20170718/mongodb.so'
install ok: channel://pecl.php.net/mongodb-1.5.2
configuration option "php_ini" is not set to php.ini location
You should add "extension=mongodb.so" to php.ini

/usr/lib/php/20170718/mongodb.so ファイルが生成されました。このモジュールファイルがドライバとなっています。

mongodb.so ファイルのパーミッションを変更しておきます。

$ sudo chmod a+r /usr/lib/php/20170718/mongodb.so

/etc/php/7.2/cli/php.ini ファイルに以下を追記します。

extension=mongodb.so

mongodb モジュールが組み込まれたことを確認します。

$ php -m | grep mongo
mongodb

“mongodb” と出力されればOKです。

参考

3. PHP から MongoDB を使ってみる

ここでは、Composer を使って導入することができる mongodb/mongodb という MongoDB用ライブラリを使います。

Composer については、以下を参考にしてください。

PHP

【PHP】Composer の使い方

2018.07.04

データの準備

予め MongoDB にデータを追加しておきます。

そのため、まずは MongoDB のサーバーを起動します。

$ mongod --fork --config /etc/mongod.conf

CLI のクライアントプログラムを実行し、MongoDB サーバー上のデータを操作します。

$ mongo

ここでは、”demo” というデータベースを使います。

> use demo

以下を貼り付けて、”unicorns” というコレクションにドキュメント(データ)を追加します。

db.unicorns.insert({name: 'Horny', dob: new Date(1992,2,13,7,47)});
db.unicorns.insert({name: 'Aurora', dob: new Date(1991, 0, 24, 13, 0)});

これでデータの準備は OK です。

PHP のプログラムを書く

作業を行うためのディレクトリを作成し、その中に移動します。

$ mkdir -p ~/work/php-mongodb-test
$ cd ~/work/php-mongodb-test

Composer で mongodb/mongodb をインストールします。

$ composer require mongodb/mongodb

次に、index.php ファイルを作成します。

このPHPファイルの中では、先程準備したコレクションに新たにドキュメント(データ)を追加し、既に追加済であったものとまとめて取得して画面に出力しています。

<?php
require 'vendor/autoload.php'; // include Composer's autoloader

// エラーを例外に変換する
function exception_error_handler($severity, $message, $file, $line) {
    if (!(error_reporting() & $severity)) {
        // このエラーコードが error_reporting に含まれていない場合
        return;
    }
    throw new ErrorException($message, 0, $severity, $file, $line);
}
set_error_handler("exception_error_handler");

// HTMLエスケープ関数
function e($html) {
    return htmlspecialchars($html, ENT_QUOTES);
}

?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>PHP x MongoDB Test</title>
</head>
<body>
    <h1>PHP x MongoDB Test</h1>
<?php

try {

    $client = new MongoDB\Client("mongodb://localhost:27017");

    $collection = $client->demo->unicorns;
    $result = $collection->insertOne( [
        'name' => 'Unicorn',
        'dob' => new MongoDB\BSON\UTCDateTime(),
        'loves' => ['energon', 'redbull'],
        'weight' => 984
    ] );

    $result = $collection->find();
    foreach ($result as $entry) {
        $datetime = '';
        if (isset($entry['dob'])) {
           $datetime = $entry['dob']->toDateTime()->format('Y年m月d日');
        }
        echo e($entry['_id']), ': ', e($entry['name']), ', ', e($datetime), '
';
    }

} catch (Exception $e) {

    echo '<h2>例外発生</h2>';

    var_dump($e->getMessage());

}

?>
</body>
</html>

PHPのビルトインサーバー(Webサーバー)を起動します。

$ php -S localhost:8000 -t .

ブラウザで、「http://localhost:8000」にアクセスします。

参考

📂-Windows Tips

執筆者:labo


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Windows

Windows Terminal についての情報

Windows Terminal アプリケーションについての情報を記載しています。

Windows

【Windows 10】エクスプローラーの「PC」と、「ドキュメント」や「ダウンロード」などの特別なフォルダーについて

目次1. エクスプローラー上に存在する「PC」2. フォルダーの場所を移動する3. [PC]と同階層にある [{ユーザー名}]4. フォルダー名について5. まとめ 1. エクスプローラー上に存在する …

Windows

テキストファイルの文字エンコーディングを変更する

テキストファイルの文字エンコーディングを変更する方法について説明しています。

Windows

Windows 10 の VirtualBox で「仮想マシン “XXXX” のセッションを開けませんでした。」というエラーが発生する問題

Windows 10 の VirtualBox で「仮想マシン “XXXX” のセッションを開けませんでした。」というエラーが発生する問題への対応方法

WSL

WSL の Ubuntu 18.04 で ssh-agent がおかしくなったので対応しました

先日「WSL の Ubuntu 16.04 LTS を 18.04 LTS にアップグレードする」という記事を書きましたが、どうやら WSL の Ubuntu 18.04 LTS では、ssh-age …