1

我使用 Homebrew 进行所有安装,但在这里遇到了一些麻烦......

所以我有一个 PHP 应用程序,无论出于何种原因,它都使用“memcache”和“memcached”模块。任何。

系统是 OS X Lion,10.7.4。Apache 是 Apple 随操作系统 Apache/2.2.21 提供的库存。我正在使用 Homebrew 的 PHP 5.3.14。

我安装了我需要的一切:

brew install libmemcached memcached php53 php53-memcache php53-memcached

并进行配置——将 Apache 设置httpd.conf为指向 PHP .so 文件,并将 memcache 和 memcached 扩展添加到我的php.ini

我加载了我的应用程序......它使 httpd 崩溃了!

这是我得到的故障转储(长转储):https ://gist.github.com/3125309

如果我brew uninstall libmemcached弹回 httpd,我就可以正常访问我的应用程序,但是 memcached 实际上并没有工作,因为它(dur)找不到 libmemcached。

我真的很想让 memcached 在本地正常工作,但我不确定这里发生了什么。这只是 PHP 的一个问题;我可以使用 Python 的python-memcached模块来访问它(但我不确定它是否使用 libmemcached)。

有什么想法吗?我在故障转储中没有看到任何看起来有用的东西:(

编辑:啊,行号很有帮助!这是关联的 libmemcached 源代码块:

  #ifdef HAVE_SNDTIMEO
  if (server->root->snd_timeout)
  {
    struct timeval waittime;

    waittime.tv_sec= 0;
    waittime.tv_usec= server->root->snd_timeout;

    int error= setsockopt(server->fd, SOL_SOCKET, SO_SNDTIMEO,
                      &waittime, (socklen_t)sizeof(struct timeval));
    assert(error == 0); 
  }
#endif

所以这听起来像是一个超时问题?但是我的 memcached 在本地主机上,它不应该超时......除非它没有尝试连接到正确的服务器。

不过,为什么这会导致完整的 httpd 崩溃?

EDIT2:我在禁用 SNDTIMEO 和 RCVTIMEO 的情况下重新编译,现在我很高兴启动并运行......但是,A)为什么配置脚本确定可以启用它们,B)为什么它会导致 httpd 崩溃?

4

1 回答 1

1

我能够通过构建我自己的 libmemcached 来解决这个问题,移除依赖于 RCVTIMEO 和 SNDTIMEO 的代码位,然后针对该自定义 libmemcached 构建 php-memcached。

我仍然不确定为什么我的系统报告 SNDTIMEO 和 RCVTIMEO 在它们不起作用时可用于 libmemcached 配置脚本。这使得 OS X 自制版本对我来说无法使用。我很惊讶其他人没有遇到这个问题。

于 2012-07-26T19:52:51.337 回答