警告:Memcached :: getMulti():无法反序列化值,无法获得igbinary支持

时间:2016-02-04 12:04:50

标签: php macos caching memcached mamp

我已经在我的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 

1 个答案:

答案 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支持,因此解决方案包括:

  • 扩展需要手动编译并加载到MAMP(--enable-memcached-igbinary),
  • 在PHP CLI中禁用igbinary(不推荐),因此它不会与Apache发生冲突,
  • 继续重新启动memcached,例如brew services restart memcached(OS X)
  • 使用PHP内置服务器,而不是支持igbinary,例如:php -S localhost:8888