LoginSignup
11
12

More than 5 years have passed since last update.

phpenvによる複数バージョン下でmemcachedをセッションハンドラとして利用する

Posted at

PHPを使った開発現場ではphpenvなどを使って複数のバージョンでの動作検証を行うこともあるかと思いますが、Apache上で動作させるためにはlibphp5.soなどをPHPのバージョンごとにビルドしないといけなくて辛いです。

同様に、memcachedをPHPのセッションハンドラとして設定する場合にも、memcachedのPHPエクステンションをバージョンごとにビルドする必要があります。

libphp5.soの生成に関しては情報が充実していたので、サクっといけるかとおもいきや、意外とハマってしまった上に、ネット上の解決策がほとんどなかったのでメモ。

実行環境

CentOS 6.6
phpenvは既にインストール済みであるとします。

libmemcachedのソースを取得

memcachedの2.2.0を使用するので、libmemcachedは1.0以降でなくてはいけません。普通にyum install libmemcachedすると0.31が入ってしまうので、ソースコードを取得して手動でビルドします。

$ cd /tmp
$ wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
$ tar -zxvf libmemcached-1.0.18.tar.gz
$ cd libmemcached-1.0.18
# ./configure --without-memcached && make && make install

特に問題が発生しなければ/var/local/lib/配下にlibmemcachedがインストールされるはずです。g++が必要なので、g++ command not foundとか言われたらyum install gcc-c++してください。

memcachedのソースを取得

memcachedの2.2.0でmemcached.soを生成します。今回はPHPのバージョン5.6.15に対して生成してみます。事前に5.6.15はphpenvでインストールしておいてください。

$ cd /tmp
$ wget http://pecl.php.net/get/memcached-2.2.0.tgz
$ tar zxvf memcached-2.2.0.tgz
$ cd memcached-2.2.0
$ phpenv local 5.6.15
$ phpize
# ./configure --with-php-config=/home/hogehoge/.phpenv/versions/5.6.15/bin/php-config --disable-memcached-sasl
# make
# make install

configureのオプションに--disable-memcached-saslを指定していますが、これはmemcachedでSASL認証を使用しないという宣言をしています。SASL認証を必要とする場合には他にも設定が必要になりますが、今回は範囲外になりますので記述しません。

./configureに失敗する場合

checking for libmemcached location... configure: error: memcached support require libmemcached. Use --with-libmemcached-dir=<DIR> to specify the prefix where libmemcacached headers and library are located

のようなエラーが発生してMakefileが生成されない場合には、libmemcached-develが存在しない可能性があります。別途インストールすることをおすすめします。

makeに失敗する場合

/tmp/memcached-2.2.0/php_libmemcached_compat.h:56: error: expected ‘=’, ‘,’, ‘;’, ‘asm’     or ‘__attribute__’ before ‘php_memcached_instance_st’

~以下省略~

のようなエラーが発生してmakeが正常に終了できない場合には、libmemcachedのバージョンが古い場合があります。上記手順の通りに1.0以上のlibmemcachedを使用することをおすすめします。特にmemcachedのバージョンが新しい場合に発生しているようです。

PHPの設定ファイルからmemcached.soを読み込む

先ほどのmake install/home/hogehoge/.phpenv/versions/5.6.15/lib/php/extensions/fugafuga/配下にmemcached.soが生成されていますので、それぞれのバージョンのPHP設定ファイルからmemcached.soを読み込みます。

/home/hogehoge/.phpenv/versions/5.6.15/etc/conf.d/memcached.ini
; Enable memcached extension module
extension=memcached.so

; ----- Options to use the memcached session handler

; Use memcache as a session handler
session.save_handler=memcached
session.save_path="127.0.0.1:11211"

これでそれぞれのバージョンのPHPでmemcachedをセッションハンドラとして利用できるようになるはずです。念のため、5.6.15でmemcachedモジュールが有効になっているか確認してみます。

$ phpenv local 5.6.15
$ php -m | grep memcached
memcached

良さそうですね。

備考

結構作業が前後したりしたので順番通りにやっても動かないかも。。
何か不具合あったらコメントください。

参考

http://qiita.com/hokutoasari/items/f5d7daa53db5b9540310
http://stackoverflow.com/questions/24407095/error-when-installing-pecl-memcached
https://enlook.wordpress.com/2011/07/27/howto-enabling-memcached-extension-on-php/

11
12
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
11
12