PHP 5.6会话+Memcache(d)

6
我遇到了一个奇怪的问题,自从我将PHP从5.4升级到5.6以来。我自己从未看到过这个错误,但是日志每天都充满了这个消息:
session_write_close():无法写入会话数据(memcached)。 请验证session.save_path的当前设置是否正确(127.0.0.1:11211)。
这并不总是发生,只有对某些用户才会发生。而且,这在有PHP ~5.6和Memcached的最新Debian上的三个不同服务器上发生。我尝试将Memcached扩展切换到Memcache(当然要更改php.ini中的save_handler),但问题仍然存在。我还尝试在php.ini中禁用会话锁定。问题肯定与PHP有关,因为我已经使用Perl脚本测试了Memcached守护程序本身,并没有出现任何连接错误。
一切都非常完美地运行了很长时间,但在升级PHP后我开始遇到这个问题,因此它与memcached配置或类似的东西无关。也许我漏掉了什么?也许5.6需要其ini文件中的一些其他配置?我只是无法弄清楚。
目前我有点困境,希望有人能给我建议。我可以尝试切换回5.4或5.5,但那不是真正的选择,我真的想坚持使用5.6。

当然,5.6是理想的选择,但是暂时切换回5.5会有很大的困难吗?你可以编译自己的版本,并在Apache配置中切换到该版本,以查看是否存在相同的问题。然后切换回主要的5.6版本将变得微不足道。 - halfer
2个回答

1

有两个与php相关的扩展程序,memcachememcached

memcached扩展程序是基于libmemcache开发的,您应该首选这个扩展程序。

根据我的经验,目前版本的memcache守护进程与memcache扩展程序无法很好地协同工作。存储数据可以正常进行,但是在第一次请求(完全新的会话)后将数据写入会话时,我遇到了严重的性能问题(第一个请求快速完成,每个后续请求需要长达10秒!)。将memcache替换为memcached解决了这个特定的问题。

警告:对于memcachedsession.save_path的语法略有不同。我必须省略tcp://否则它将无法工作。

因此,对于memcached使用:

session.save_path = "127.0.0.1:11211"

对于memcache的使用:

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

0
请确保你的 php.ini 文件中的 session 设置如下。
session.save_path = "tcp://127.0.0.1:11211"

或者针对Unix套接字

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接