2014-06-12 4 views
7

Amazon Linux를 사용하여 AWS에서 php 5.4를 사용하는 응용 프로그램을 실행 중입니다.PHP 세션이 memcache에 저장되지 않습니다.

PHP 버전은 PHP 5.4.28입니다. AWS의 REPO에서 설치 memcache에 lib 디렉토리가 php54-PECL-memcache에-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 

내가 마지막 지점 & 포트 상자에서 텔넷 및 인스턴스가 memcached를 서버에 연결할 수 있도록 적절하게 연결할 수 있습니다. 우리가 시도

것 : 나는 TCP를 제거한

  • : 그 차이를하지 // php.ini 파일에서, 그리고 - 세션은 여전히 ​​파일에 저장 얻고있다.
  • 우리는 session.save_handler를 = "memcache를"에서 변경
  • 우리가 변화 할 때마다, 우리는 아파치 서버를 중지하고 우리는 심지어 시도
  • 다시 시작 = "memcached를"session.save_handler를합니다 서버를 재부팅

우리가 시도한 것에 관계없이 세션은 디스크의/var/lib/php/sessions에 저장됩니다. 누락 된 것이 있거나 알려진 5.4 또는 AWS 문제입니까?

+0

'memcached' 대신에'memcached'를 처리기로 사용할 수 있습니까? – DanFromGermany

+0

@DanFromGermany : 아니요, 이것은 기존 코드이며 db 캐시에 memcache를 사용합니다. – chris

+0

PHP 5.4.29는 유산이 아닙니다. 그냥 memcached 모듈을 설치하고 시도하십시오. PHP 코드에 아무런 영향을 미치지 않습니다. Btw PHP (모듈이라면 웹 서버, fcgi이면 fpm)를 다시 시작 했습니까? – DanFromGermany

답변

13

좋습니다, 우리는 문제를 해결할 수있었습니다.

먼저 phpinfo()를 내뱉은 간단한 페이지를 만들었습니다. php -i를 실행하면 아파치가 추가 할 수있는 오버라이드를 포함시키지 않는다는 것을 웹 서버를 통해 확인하는 것이 중요합니다.

세션 섹션에서 출력에는 모든 지시문과 "로컬 값"및 "마스터 값"이 나열됩니다.

지역 값을했다 : 마스터 값이 있었다

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의 설정보다 우선하지만 웹 서버를 통해 실행되는 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 확장을 사용하고 있습니다. 작동하지 않는 세션 만입니다. – chris

+1

"tcp : //"없이 연결 URL을 사용하십시오 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

관련 문제