PHP+;通过CLI运行时的Memcached异常

PHP+;通过CLI运行时的Memcached异常,php,zend-framework,zend-framework2,memcached,libmemcached,Php,Zend Framework,Zend Framework2,Memcached,Libmemcached,我们最近开始使用ZF2提供的Memcached缓存适配器。当使用web浏览器(Apache HTTP服务器)时,服务器似乎运行得很好,但当从CLI运行应用程序时,我看到了两个不同的异常。当Zend\Session\SaveHandler\Cache将会话写入内存时,出现异常 第一个异常返回的错误代码为47(MEMCACHED\u SERVER\u临时禁用)。在用尽了许多选项之后,我决定尝试重新编译Memcached、libmemcached和PECL扩展。这样做之后,我开始得到一个不同的结果co

我们最近开始使用ZF2提供的Memcached缓存适配器。当使用web浏览器(Apache HTTP服务器)时,服务器似乎运行得很好,但当从CLI运行应用程序时,我看到了两个不同的异常。当
Zend\Session\SaveHandler\Cache
将会话写入内存时,出现异常

第一个异常返回的错误代码为47(
MEMCACHED\u SERVER\u临时禁用
)。在用尽了许多选项之后,我决定尝试重新编译Memcached、libmemcached和PECL扩展。这样做之后,我开始得到一个不同的结果code-26(
MEMCACHED\u ERRNO
)。此代码的结果消息为“系统错误:管道破裂”

在缓存适配器中,
internalSetItem($normalizedKey,$value)
方法检查
Memcached::set($key,$value,$expiration)
返回的布尔值。如果为false,则表示发生了故障,ZF2适配器将基于
Memcached::getResultCode()
Memcached::getResultMessage()
方法引发异常。在此之前,我们只是没有检查结果代码或消息,所以它可能一直都在发生

我的开发环境规范如下:

  • 带有Memcached 2.2.0(PECL)的PHP5.5
  • Memcached 1.4.20
  • Libmemcached 1.0.18
  • Zend框架2
编辑:我已经将问题缩小到单个控制器中的单个操作,但我仍然不知道为什么会发生这种情况。我们有一个ZF2控制器动作,它基本上通过一堆cron作业循环,并在它们自己的进程中分叉。事情是这样的

  • 循环遍历cron作业
  • 运行
    pcntl\u fork()
    创建新流程
  • 运行
    exec('/usr/bin/php index.php作业\u名称')

  • 事实证明,第三步执行起来没有任何问题。每个作业都完全按照预期运行,但分叉似乎在父进程中创建Memcached问题。那就是我现在所在的地方。

    如果link有什么帮助吗?谢谢你的回复。不幸的是,虽然我遇到了这个问题/答案,但它不适用于我的情况。如果您使用memcached作为会话存储,我建议在fork操作之前运行session\u write\u close()。