11

我已经memcached安装了 libmemcached。我也安装了igbinary.

这是我的 php.ini:

; Directory in which the loadable extensions (modules) reside.
;extension_dir = "./"
extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20060613/"

extension=apc.so
apc.enabled=1
apc.shm_size=128M

extension=memcached.so
session.save_handler=memcached
session.save_path="127.0.0.1:11211"

extension=igbinary.so
session.serialize_handler=igbinary
igbinary.compact_strings=On

.

当我运行 phpinfo() 时,我看到 igbinary 已启用,但不适用于 memcached:

apc
Serialization Support   php, igbinary 

igbinary
igbinary support    enabled
igbinary version    1.1.1
igbinary APC serializer ABI     0

Directive   Local Value Master Value
igbinary.compact_strings    On  On

关于 memcached 的 Phpinfo():

memcached
memcached support   enabled
Version     1.0.2
libmemcached version    0.51
Session support     yes
igbinary support    no 

最后一行:igbinary support这就是问题所在。奇怪的是,正如您在标题 apc 下看到的那样:Serialization Support php, igbinary.

那么有人知道为什么我不能为memcached启用 igbinary吗?

谢谢!

4

3 回答 3

12

您无法启用它,因为 PECL memcached 不是使用“--enable-memcached-igbinary”构建的

PECL 安装不将此作为标志,因此您可以使用它构建 pecl memcached(以下示例在 ubuntu 上以 root 身份)

#if you have libmemcached-dev < 1.0.X need to run: sudo apt-get purge libmemcached-dev
apt-get install libevent-dev
pecl install igbinary    

#cant do sudo pecl install memcached-2.1.0 cuz it wont let me use igbinary
#compiling manually per http://www.neanderthal-technology.com/2011/11/ubuntu-10-install-php-memcached-with-igbinary-support/

#install libmemcached v 1.0.X for pecl memcached 2.1.0
cd /tmp
libmemcached_ver="1.0.15"
wget https://launchpad.net/libmemcached/1.0/${libmemcached_ver}/+download/libmemcached-${libmemcached_ver}.tar.gz
tar xzvf libmemcached-${libmemcached_ver}.tar.gz
cd libmemcached-${libmemcached_ver}/
./configure
make
make install
cd ../
rm -r libmemcached-${libmemcached_ver}

#install memcached PECL extension
pecl_memcached_ver="2.1.0"
pecl download memcached-${pecl_memcached_ver}
tar xzvf memcached-${pecl_memcached_ver}.tgz
cd memcached-${pecl_memcached_ver}/
phpize
./configure --enable-memcached-igbinary
make
make install
cd ..
rm -r memcached-${pecl_memcached_ver}

echo "extension=igbinary.so" > /etc/php5/fpm/conf.d/igbinary.ini
echo "extension=memcached.so" > /etc/php5/fpm/conf.d/memcached.ini

#now restart your PHP server

加载一个 phpinfo() 页面,您现在应该在 memcached 部分看到“igbinary support: yes”。

于 2012-12-26T17:18:00.617 回答
11

您可以检查Memcached::HAVE_IGBINARY常量以查看您的 memcached 扩展是否是使用--enable-memcached-igbinary编译的。

来源: http: //php.net/manual/en/memcached.constants.php

Memcached::OPT_SERIALIZER

指定用于序列化非标量值的序列化程序。有效的序列化程序是 Memcached::SERIALIZER_PHP 或 Memcached::SERIALIZER_IGBINARY。仅当使用 --enable-memcached-igbinary 选项配置 memcached 并且加载了 igbinary 扩展时,才支持后者。

类型:整数,默认:Memcached::SERIALIZER_PHP。

Memcached::HAVE_IGBINARY

指示 igbinary 序列化程序支持是否可用。

类型:布尔值。

于 2011-07-26T14:03:44.377 回答
1

如果您在 Mac 上工作并使用 MacPorts,则可以使用以下命令安装支持 igbinary 的 php5-memcached 扩展:

sudo port install php5-memcached +igbinary

+igbinary指定php5-memcached端口的变体。

该命令将在您的 Mac 上安装启用 igbinary 的 memcached 扩展。

您可以在此处阅读有关端口变体的更多信息:http: //guide.macports.org/#using.variants

于 2011-12-14T14:32:14.227 回答