PHP 5.6会话+ Memcache(d)

时间:2015-01-02 13:48:17

标签: php session memcached php-5.6

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

  

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

这不会一直发生,但仅适用于某些用户。这发生在具有PHP~5.6& 3的三个不同服务器上。 Memcached关于最新的Debian。我已经尝试将Memcached扩展切换到Memcache(当然在php.ini中更改save_handler),问题仍然存在。我也试过在php.ini中禁用会话锁。问题肯定与PHP有关,因为我已经使用Perl脚本测试了Memcached守护程序本身,并且没有一个连接错误。

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

目前我有点陷入困境,我希望有人能帮助我提出建议。我可以尝试切换回5.4或5.5,但这不是一个选项,我真的想坚持5.6。

2 个答案:

答案 0 :(得分:1)

有2个扩展名为php, memcache memcached

memcached 扩展程序基于libmemcache,无论如何你应该更喜欢它。

根据我的经验,当前版本的memcache守护程序与 memcache 扩展名不相称。存储数据有效,但是我遇到了在第一次请求之后将数据写入会话的重大性能问题(第一次请求全新会话很好而且速度很快,每次后续请求都需要10秒钟!)。用 memcached 替换 memcache 修复了这个特殊问题。

警告 memcached session.save_path语法略有不同。我不得不省略tcp://或者它不起作用

因此,对于 memcached ,请使用:

session.save_path = "127.0.0.1:11211"

对于 memcache ,请使用:

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

答案 1 :(得分:0)

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

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

或unix套接字

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