PHPでMemcachedにアクセスする場合に、選択肢は2つあります。
memcacheとmemcachedのどちらかです。
今回は、memcacheについて解説します。
これには、PHP 8.0が大きく関係しています。
この記事では、memcacheを採用した理由とインストール方法について解説しています。
本記事の内容
- memcacheとは?
- memcacheのシステム要件
- memcacheのインストール
- php.iniへの追記
- memcacheの動作確認
それでは、上記に沿って解説していきます。
memcacheとは?
memcacheは、PHP Extension(拡張モジュール)のことです。
memcacheを使えば、PHPからMemcachedへのアクセスが可能になります。
また、PHP ExtensionはC言語で開発されています。
PHP Extensionの利用により、PHPだけでは実行不可能な処理や速度を実現できます。
Memcachedに関するPHP Extensionは、二つ存在しています。
現時点(2021年6月)での、それぞれの最新バージョンは以下。
拡張モジュール名 | 最新バージョン | リリース日 |
Memcached | 3.1.5 | 2019-12-03 |
memcache | 8.0 | 2020-12-06 |
そして、PHP 8.0のリリース日は2020年11月26日となります。
リリース日を見ればわかりますが、memcacheはPHP 8.0に対応しているのです。
だからこそ、今回memcacheを採用しています。
以上、memcacheについての説明でした。
次は、memcacheのシステム要件を確認します。
memcacheのシステム要件
現時点(2021年6月)でのmemcacheの最新バージョンは、8.0となります。
この最新バージョンは、2020年12月6日にリリースされています。
memcacheのシステム要件でのポイントは、次の2つです。
- PHPバージョン
- PECLコマンド
それぞれを下記で説明します。
PHPバージョン
memcache 8.0の公式ページ
https://pecl.php.net/package/memcache/8.0
上記で次のように記載されています。
memcache 8.0は、PHP 8のみがサポート対象となります。
それ以前のPHPは、memcache 4系を利用するように記載しています。
なお、PHP 8.0のインストールは次の記事で解説しています。
PECLコマンド
PECL(ピクル)コマンドを使って、memcacheのインストールを行います。
PEARをインストールすると、PECLも同時にインストールされます。
PECLコマンドを利用できることが、システム要件となります。
あと、PECLのバージョンが古すぎるとダメです。
PEAR Package: PEAR 1.4.0b1 or newer
PECL(PEAR)のバージョンは、次のコマンドで確認可能。
$ pecl version PEAR Version: 1.10.12 PHP Version: 8.0.5 Zend Engine Version: 4.0.5 Running on: Linux ubuntu-focal 5.4.0-73-generic #82-Ubuntu SMP Wed Apr 14 17:39:42 UTC 2021 x86_64
かなり古い環境でなければ、PECLのバージョンは問題ないでしょう。
そもそも、そんな古い環境にPHP 8.0をインストールできるとは思えません。
以上、memcacheのシステム要件について説明しました。
次は、memcacheをインストールしていきましょう。
memcacheのインストール
memcacheをインストールしていきます。
今回は、以下OSでのインストールをもとに説明します。
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=20.04 DISTRIB_CODENAME=focal DISTRIB_DESCRIPTION="Ubuntu 20.04.1 LTS"
まずは、memcacheのパッケージについて調べます。
$ sudo pecl search memcache Retrieving data...0% ~PHPのWaringが出る(省略)~ Matched packages, channel pecl.php.net: ======================================= Package Stable/(Latest) Local memcache 8.0 (stable) memcached extension memcached 3.1.5 (stable) PHP extension for interfacing with memcached via libmemcached library mysqlnd_memcache 1.0.1 (stable) A PHP extension for transparently translating SQL into requests for the MySQL InnoDB Memcached Daemon Plugin
インストールする際に、バージョンを指定する必要はありませんね。
次のコマンドでインストール可能ということです。
pecl install memcache
上記を実行すると、途中でサポートの有無の確認が行われます。
$ sudo pecl install memcache downloading memcache-8.0.tgz ... Starting to download memcache-8.0.tgz (78,448 bytes) ..................done: 78,448 bytes 18 source files, building running: phpize Configuring for: PHP Api Version: 20200930 Zend Module Api No: 20200930 Zend Extension Api No: 420200930 Enable memcache session handler support? [yes] :
セッション管理をmemcacheでできるようにするかどうかの確認です。
PHP側の設定(php.ini)により、実際の利用に関しては制御できるでしょう。
「yes」を入力して、Enter。
処理が続いて、最後に以下の表示で終わります。
Build process completed successfully Installing '/usr/lib/php/20200930/memcache.so' install ok: channel://pecl.php.net/memcache-8.0 configuration option "php_ini" is not set to php.ini location You should add "extension=memcache.so" to php.ini
memcacheのインストールは、上手くいったようです。
あとは、php.iniでの作業が必要なことを知らせてくれています。
以上、memcacheのインストールについて説明しました。
次は、表示に従ってphp.iniへの追記を行います。
php.iniへの追記
PHPにmemcacheの存在を教えましょう。
そのために、php.iniにmemcache.soを追記します。
php.iniの場所がわからない場合は、phpinfo()で出力した画面を確認しましょう。
この方法が、最も確実です。
php.iniに「extension=memcache.so」を追記します。
この変更を反映させましょう。
そのために、Apacheの再起動が必要です。
Apacheの再起動は、次のように実行します。
$ sudo service apache2 restart
確認は、phpinfo()の画面で行います。
「memcache」で検索して、次のような表示があればOKです。
なんと、Versionが違います!!
これは、ソースでの更新漏れだと思います。
memcache 8.0のソース
https://pecl.php.net/get/memcache-8.0.tgz
上記で取得したソースを検索します。
$ find . -name "*" -type f | xargs grep '4.0.5.2' ./src/php_memcache.h:#define PHP_MEMCACHE_VERSION "4.0.5.2"
この箇所(PHP_MEMCACHE_VERSION )の更新忘れでしょう。
こんなミスもあるのですね。
以上、php.iniへの追記に関して説明しました。
最後は、memcacheの動作確認を行います。
memcacheの動作確認
動作確認の大前提として、 Memcachedが起動していることは絶対です。
Memcachedのインストールに関しては、次の記事で解説しています。
動作確認は、次のページを参考にします。
https://www.php.net/manual/ja/memcache.examples-overview.php
以下をsample.phpという名前で保存します。
<?php $memcache = new Memcache; $memcache->connect('localhost', 11211) or die ("接続できませんでした"); $version = $memcache->getVersion(); echo "サーバーのバージョン: ".$version."<br/>\n"; $tmp_object = new stdClass; $tmp_object->str_attr = 'test'; $tmp_object->int_attr = 123; $memcache->set('key', $tmp_object, false, 10) or die ("データをサーバーに保存できませんでした"); echo "データをキャッシュに保存します (データの有効期限は 10 秒です)<br/>\n"; $get_result = $memcache->get('key'); echo "キャッシュから取得したデータ:<br/>\n"; var_dump($get_result); ?>
ブラウザでアクセスします。
Memcachedのバージョンが、正確に取得できています。
SETもGETも機能しています。
動作としては、問題ありません。
以上、memcacheの動作確認について説明しました。