2014-06-12 12 views
7

Esecuzione di un'applicazione utilizzando php 5.4 su AWS utilizzando Amazon Linux.Le sessioni PHP non vengono salvate in memcache

La versione PHP è PHP 5.4.28. lib memcache installato dal repo AWS è php54-PECL-memcache-3.0.8-1.11.amzn1.x86_64

Ho verificato che il PHP sta usando /etc/php.ini:

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

Il impostazione spettacolo che dovrei usare 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 

posso telnet dalla scatola al porto punto finale & e collegare correttamente, quindi l'istanza è in grado di connettersi al server memcached.

Le cose che abbiamo provato:

  • Ho rimosso il tcp: // dal file php.ini, e che ha fatto alcuna differenza - le sessioni sono ancora sempre salvate in file.
  • Abbiamo cambiato da session.save_handler = "memcache" per session.save_handler = "memcached"
  • ogni volta che facciamo un cambiamento, ci fermiamo il server httpd, e poi riavviarlo
  • abbiamo anche provato riavvio dei server

Indipendentemente da ciò che abbiamo provato, le sessioni vengono archiviate su disco in/var/lib/php/sessions. C'è qualcosa che mi manca, o si tratta di un problema noto di 5.4 o AWS?

+0

Puoi provare 'memcached' come gestore invece di' memcache'? – DanFromGermany

+0

@DanFromGermany: No, questo è un codice legacy e utilizza memcache per le cache db. – chris

+0

PHP 5.4.29 non è legacy. Basta installare il modulo memcached e provarlo. Comunque non influenzerà il tuo codice PHP. Btw hai riavviato PHP (o server web se si tratta di un modulo o di fpm se è fcgi)? – DanFromGermany

risposta

13

OK, siamo riusciti a capire il problema.

In primo luogo, abbiamo creato una semplice pagina che sputa phpinfo(). Si noti che è importante eseguire questo attraverso il server web - l'esecuzione di php -i NON include eventuali sostituzioni che Apache potrebbe aggiungere.

Nella sezione sessione, l'output elenca tutte le direttive, un "Valore locale" e un "Valore principale".

I valori locali avevano:

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

mentre i valori Maestro aveva:

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

Si scopre che c'è un override installato di default in /etc/httpd/conf.d/php .conf che specifica i file. Questa sembra essere una cosa Redhat/CentOS/Fedora.

La rimozione di quei valori da php.conf ha risolto il problema.

+0

Un po 'quello che ho detto nei commenti ... guarda 'phpinfo()'. Solo io pensavo che la tua configurazione avrebbe puntato su un altro php.ini. Così il file php.conf sovrascrive solo l'impostazione della sessione o punta a un altro file php.ini? –

+0

@ nl-x: php.conf sovrascrive le impostazioni in php.ini, ma solo per php eseguito attraverso il web server. Ecco perché non l'abbiamo visto in esecuzione php -i. – chris

+0

Uomo assolutamente geniale, stavo impazzendo con questo, sto usando CentOs7 e posso confermare che c'è un override in php.conf. – soipo

6

Entrambe le principali estensioni PHP PECL di memcache dispongono di gestori di sessione. Prima di utilizzare, è necessario installare un modulo PECL.

I PECL gestore sessione di estensione Memcache è attivata con il seguente nel file php.ini:

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

Il Memcached PECL gestore sessione di estensione è attivata con il seguente nel file php.ini:

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

Si noti che l'estensione Memcache sembra consentire una maggiore configurazione dell'ambiente Memcache.

+0

Stiamo usando l'estensione memcache, che è installata e funziona correttamente per le cache di dati. Sono solo le sessioni che non funzionano. – chris

+1

Provare a utilizzare url connessione senza "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

Aggiornamento della domanda: l'abbiamo provato e non ha fatto alcuna differenza. – chris