使用phpenv,在多个版本下使用memcached作为会话处理程序

在使用PHP进行开发的现场中,我认为有时会使用像phpenv这样的工具来验证在多个版本下的运行情况。不过,为了在Apache上运行,必须为每个PHP版本构建libphp5.so等文件,这一点很麻烦。

同样地,如果要将memcached设置为PHP的会话处理程序,则需要针对memcached的每个版本构建PHP扩展。

由于关于libphp5.so生成的信息非常丰富,所以本以为可以轻松地完成,但意外地遇到了一些困难,并且在网络上几乎找不到解决方案,因此做了个备忘录。

执行环境

假设已经安装了 CentOS 6.6 并且已经安装了 phpenv。

获取libmemcached源代码

由于使用memcached 2.2.0,所以需要libmemcached 1.0或更高版本。如果只是普通地使用yum安装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

如果没有出现问题的话,libmemcached 应该会被安装在 /var/local/lib 目录下。由于需要 g++,所以如果出现 “g++ command not found” 的提示,请运行 yum install gcc-c++ 安装它。

获取memcached的源代码

在Memcached 2.2.0中生成memcached.so。我们将尝试生成该文件以适应PHP版本5.6.15。请事先使用phpenv安装5.6.15。

$ 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,这表示不使用SASL身份验证来认证memcached。如果需要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过程中,生成了memcached.so文件在/home/hogehoge/.phpenv/versions/5.6.15/lib/php/extensions/fugafuga/目录下,所以我们需要从每个版本的PHP配置文件中加载memcached.so。

; 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
– 这是一篇关于如何在PHP中启用Memcached扩展的文章。

http://stackoverflow.com/questions/24407095/error-when-installing-pecl-memcached
– 这是一个关于安装PECL Memcached时出现错误的问题。

Howto : Enabling memcached extension on php.


– 这是一篇关于如何在PHP中启用Memcached扩展的教程。