8

使用 Amazon Linux 在 AWS 上使用 php 5.4 运行应用程序。

PHP 版本是 PHP 5.4.28。从 AWS 存储库安装的 memcache 库是 php54-pecl-memcache-3.0.8-1.11.amzn1.x86_64

我已经验证 php 正在使用 /etc/php.ini:

[root@ip-xx.xx.xx.xx]# php -i | grep Config
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

该设置表明我应该使用 memcache:

[root@ip-10-40-17-119 etc]# grep "^session.save" php.ini
session.save_handler="memcache"
session.save_path="tcp://<elasticache-endpoint>:11211"

[root@ip-10-40-17-119 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

我可以从盒子远程登录到端点和端口并正确连接,因此实例能够连接到 memcached 服务器。

我们尝试过的事情:

  • 我已经从 php.ini 文件中删除了 tcp://,这并没有什么不同——会话仍然保存在文件中。
  • 我们已从 session.save_handler="memcache" 更改为 session.save_handler="memcached"
  • 每次我们进行更改时,我们都会停止 httpd 服务器,然后重新启动它
  • 我们甚至尝试重新启动服务器

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

4

2 回答 2

17

好的,我们设法解决了这个问题。

首先,我们创建了一个输出 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 中删除这些值可以解决问题。

于 2014-06-12T15:13:41.510 回答
9

两个主要的内存缓存 PHP PECL 扩展都有会话处理程序。两者都需要您在使用前安装 PECL 模块。

Memcache PECL 扩展会话处理程序在 php.ini 中使用以下内容启用:

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

Memcached PECL 扩展会话处理程序在 php.ini 中使用以下内容启用:

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

请注意,Memcache 扩展似乎允许对 Memcache 环境进行更多配置。

于 2014-06-12T12:45:09.563 回答