2014-06-12 36 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