2014-06-12 62 views
7

使用Amazon Linux在AWS上使用php 5.4运行应用程序。未将PHP会话保存在memcache中

PHP版本是PHP 5.4.28。从AWS回购安装 内存缓存LIB是php54-PECL,内存缓存,3.0.8-1.11.amzn1.x86_64

我已经验证,PHP是使用/etc/php.ini中:

[[email protected]]# php -i | grep Config 
Configuration File (php.ini) Path => /etc 
Loaded Configuration File => /etc/php.ini 

的设置,我应该使用的memcache显示:

[[email protected] etc]# grep "^session.save" php.ini 
session.save_handler="memcache" 
session.save_path="tcp://<elasticache-endpoint>:11211" 

[[email protected] php.d]# php -i | grep session.save 
session.save_handler => memcache => memcache 
session.save_path => tcp://<elasicache-endpoint>:11211?persistent=1&weight=1&timeout=1&retry_interval=15 => tcp://<elasticache-endpoint>:11211?persistent=1&weight=1&timeout=1&retry_interval=15 

我可以从包装盒到终点&端口Telnet和正确连接,所以实例是能够连接到memcached服务器。

的事情,我们曾尝试:

  • 我已删除了TCP://从php.ini文件,并没有什么区别 - 会话仍然得到保存在文件中。
  • 我们从session.save_handler =“内存缓存”改为session.save_handler =“分布式缓存”每次我们作出改变时
  • ,我们停止在httpd服务器,然后再启动它
  • 我们甚至试图重新启动服务器

无论我们尝试过什么,会话都会存储在磁盘上/ var/lib/php/sessions。 有什么我很想念,或者这是一个已知的5.4或AWS问题?

+0

你可以尝试'memcached'作为处理程序而不是'memcache'吗? – DanFromGermany

+0

@DanFromGermany:不,这是遗留代码,并为db缓存使用memcache。 – chris

+0

PHP 5.4.29不是传统。只需安装memcached模块并尝试一下。反正它不会影响你的PHP代码。顺便说一句,你重新启动PHP(无论是网络服务器,如果它是一个模块,或者fpm,如果它是fcgi)? – DanFromGermany

回答

13

好的,我们设法弄清楚了这个问题。

首先,我们创建了一个吐出phpinfo()的简单页面。请注意,通过Web服务器运行这一点很重要 - 运行php -i不包括Apache可能添加的任何重写。

在会话部分下,输出列出了所有的指令,以及“本地值”和“主值”。

本地值有:

session.save_handler files 
session.save_path /var/lib/php/session 

,而主值有:

session.save_handler memcache 
session.save_path tcp://<endpoint>:11211 

事实证明,有默认的安装/etc/httpd/conf.d/php一个覆盖.conf指定了这些文件。这似乎是一个Redhat/CentOS/Fedora的事情。

从php.conf中删除这些值修复了这个问题。

+0

有点我在评论中说过...看看'phpinfo()'。只有我猜测你的配置会指向另一个php.ini。那么php.conf文件只覆盖会话设置,还是指向另一个php.ini文件? –

+0

@ nl-x:php.conf覆盖了php.ini中的设置,但仅限于通过Web服务器运行的php。这就是为什么我们没有看到它运行php -i。 – chris

+0

绝对聪明的人,我对此感到疯狂,我正在使用CentOs7,并且我可以确认在php.conf中有重写。 – soipo

6

这两种主要的memcache PHP PECL扩展都有会话处理程序。要么在使用前要求您安装PECL模块。

session.save_handler = "memcached" 
session.save_path = "memcacheServerAddressHere:11211" 

session.save_handler = "memcache" 
session.save_path = "tcp://memcacheServerAddressHere:11211?persistent=1&weight=2&timeout=2&retry_interval=10" 

Memcached PECL扩展会话处理程序与在php.ini以下启用:

Memcache PECL扩展会话处理程序与在php.ini以下启用请注意,Memcache扩展似乎允许更多配置Memcache环境。

+0

我们正在使用memcache extenstion,该数据缓存已正确安装并正常工作。只有会议没有工作。 – chris

+1

尝试使用不带“tcp://”的连接网址 session.save_path =>:11211?persistent = 1&weight = 1&timeout = 1&retry_interval = 15 =>:11211?persistent = 1&weight = 1&timeout = 1&retry_interval = 15 – user3733902

+0

更新了问题 - 我们尝试了这一点,并没有什么区别。 – chris