6

我有一个奇怪的问题,因为我已将 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 守护进程本身,并且没有一个连接错误。

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

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

4

2 回答 2

1

有 2 个 php 扩展,memcachememcached

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

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

警告memcachedsession.save_path的语法略有不同。我不得不省略否则它不会工作tcp://

所以对于memcached的使用:

session.save_path = "127.0.0.1:11211"

对于内存缓存使用:

session.save_path = "tcp://127.0.0.1:11211"
于 2015-09-30T14:21:23.660 回答
0

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

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

或用于 unix 套接字

session.save_path = "unix:///var/run/memcached.sock"
于 2015-01-08T11:38:39.443 回答