Running an application using php 5.4 on AWS using the Amazon Linux.
PHP version is PHP 5.4.28.
memcache lib installed from the AWS repo is php54-pecl-memcache-3.0.8-1.11.amzn1.x86_64
I have verified that php is using /etc/php.ini:
[[email protected]]# php -i | grep Config Configuration File (php.ini) Path => /etc Loaded Configuration File => /etc/php.ini
The setting show that I should be using 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
I can telnet from the box to the end point & port and connect properly, so the instance is able to connect to the memcached server.
Things that we have tried:
- I have removed the tcp:// from the php.ini file, and that made no difference – sessions are still getting saved in files.
- We have changed from session.save_handler=”memcache” to session.save_handler=”memcached”
- each time we make a change, we stop the httpd server, and then start it again
- we have even tried rebooting the servers
Regardless of what we’ve tried, sessions are stored on disk to /var/lib/php/sessions.
Is there something I’m missing, or is this a known 5.4 or AWS issue?
OK, we managed to figure out the issue.
First, we created a simple page that spit out phpinfo(). Note that it is important that you run this thru the web server – running php -i DOES NOT include any overrides that apache may add.
Under the session section, the output lists all the directives, and a “Local Value” and a “Master Value”.
The local values had:
session.save_handler files session.save_path /var/lib/php/session
while the master values had:
session.save_handler memcache session.save_path tcp://<endpoint>:11211
It turns out that there’s an override installed by default in /etc/httpd/conf.d/php.conf that specifies the files. This appears to be a Redhat/CentOS/Fedora thing.
Removing those values from php.conf fixed the problem.
Both of the major memcache PHP PECL extensions have session handlers. Either will require you to install a PECL module before use.
The Memcache PECL extension session handler is enabled with the following in php.ini:
session.save_handler = "memcache" session.save_path = "tcp://memcacheServerAddressHere:11211?persistent=1&weight=2&timeout=2&retry_interval=10"
The Memcached PECL extension session handler is enabled with the following in php.ini:
session.save_handler = "memcached" session.save_path = "memcacheServerAddressHere:11211"
Note that the Memcache extension appears to allow more configuration of the Memcache environment.