memcacheをインストールしてPHP 8からMemcachedへアクセス

memcacheをインストールしてPHP 8からMemcachedへアクセス サーバー

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月)での、それぞれの最新バージョンは以下。

拡張モジュール名最新バージョンリリース日
Memcached3.1.52019-12-03
memcache8.02020-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の動作確認について説明しました。

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