我已经在我的Drupal网站上成功使用了memcached(在OS X上通过brew
安装)已经有几个月了。
然而,在很长的页面加载后,此错误开始发生蓝色:
(!)警告:Memcached :: getMulti():无法在第375行的sites / all / modules / contrib / memcache / dmemcache.inc中反序列化值,没有igbinary支持
为什么会发生这种情况,为什么我需要igbinary
(我认为我有)以及如何解决这个问题?
我似乎已经安装了php56-igbinary
。
$ php -i | grep igbinary
Additional .ini files parsed => /usr/local/etc/php/5.6/conf.d/ext-igbinary.ini,
igbinary
igbinary support => enabled
igbinary version => 1.2.1
igbinary APC serializer ABI => no
igbinary session support => yes
igbinary.compact_strings => On => On
igbinary support => yes
memcached.serializer => igbinary => igbinary
Registered serializer handlers => php_serialize php php_binary wddx igbinary
答案 0 :(得分:1)
Igbinary是标准PHP serializer的替代品,它通常消耗大量时间和空间以文本表示形式存储数据。由于支持该扩展,使用memcached或类似的基于内存的存储(例如Redis)时节省很多,因为所有PHP数据结构都以紧凑的二进制形式存储。
我处理它的问题发生了,因为有两个PHP版本,一个用于CLI,有igbinary支持(例如drush
使用),另一个用于Apache / MAMP没有igbinary
:
$ /Applications/MAMP/bin/php/php5.6.10/bin/php -i | grep igbinary
igbinary support => no
因此,出于某种原因,某些对象使用PHP与igbinary
进行了缓存,然后在没有该支持的情况下,PHP无法对其进行反序列化。
似乎MAMP没有为他们的PHP包提供igbinary支持,因此解决方案包括:
--enable-memcached-igbinary
),igbinary
(不推荐),因此它不会与Apache发生冲突,memcached
,例如brew services restart memcached
(OS X)php -S localhost:8888