【问题标题】:PHP 5.6 Sessions + Memcache(d)PHP 5.6 会话 + Memcache(d)
【发布时间】:2015-02-28 20:21:31
【问题描述】:

我遇到了一个奇怪的问题,因为我已将 PHP 从 5.4 升级到 5.6。我自己从来没有见过这个错误,但是每天都有这样的消息记录完整:

session_write_close():写入会话数据失败(memcached)。请验证 session.save_path 的当前设置是否正确 (127.0.0.1:11211)

这并不总是发生,但仅适用于某些用户。这发生在三个不同的服务器上,它们在最新的 Debian 上具有 PHP ~5.6 和 Memcached。我尝试将 Memcached 扩展切换到 Memcache(当然是在 php.ini 中更改 save_handler),但问题仍然存在。我还尝试在 php.ini 中禁用会话锁定。问题肯定是和PHP有关,因为我用Perl脚本测试过Memcached daemon本身,没有一个连接错误。

在很长一段时间内一切都很完美,我在 PHP 升级后就开始遇到这个问题,所以它与 memcached 配置或类似的东西无关。也许我错过了什么?也许 5.6 在它的 ini 文件中需要一些额外的配置?我就是想不通。

目前我有点卡住了,我希望任何人都可以为我提供建议。我可以尝试切换回 5.4 或 5.5,但这不是一个真正的选择,我真的很想坚持使用 5.6。

【问题讨论】:

  • 当然 5.6 是理想的,但是暂时切换回 5.5 会不会是个大难题?你可以编译你自己的版本,然后在盒子的 Apache 配置中切换它,看看你是否遇到同样的问题。切换回主要的 5.6 版本将是微不足道的。

标签: php session memcached php-5.6


【解决方案1】:

php有2个扩展,memcachememcached

memcached 扩展基于 libmemcache,无论如何你应该更喜欢那个。

根据我的经验,当前版本的 memcache 守护进程不能很好地与 memcache 扩展配合使用。存储数据有效,但我在第一次请求后将数据写入会话时遇到了严重的性能问题(对全新会话的第一次请求很好而且很快,每个后续请求最多需要 10 秒!)。用 memcached 替换 memcache 解决了这个特殊问题。

警告memcachedsession.save_path 语法略有不同。我必须省略 tcp:// 否则它不起作用

所以对于 memcached 使用:

session.save_path = "127.0.0.1:11211"

对于 memcache 使用:

session.save_path = "tcp://127.0.0.1:11211"

【讨论】:

    【解决方案2】:

    请确保在你的 php.ini 中会话是这样的。

    session.save_path = "tcp://127.0.0.1:11211"
    

    或用于 unix 套接字

    session.save_path = "unix:///var/run/memcached.sock"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-17
      • 2014-01-29
      • 2011-04-24
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多