[php] PHP 5.3 및 세션 폴더 관련 문제

최근에 PHP 5.3으로 업그레이드 한 후 Apache (또는 세션 파일의 클리너 일 수 있음)에 세션이 저장된 폴더에 대한 권한이 없음을 나타내는 (산발적 인) 오류 메시지가 표시됩니다.
이것은 무작위로 발생하며 정확한 단계로 재현 할 수 없기 때문에 세션 클리너라고 추측하게되었습니다.
누구든지 그러한 오류에 대한 경험이 있습니까?

오류 메시지 ( session_start()라인에서 발생)는 다음과 같습니다.

ps_files_cleanup_dir : opendir (/ var / lib / php5) 실패 : 권한이 거부되었습니다.

세션 디렉토리의 ls -ltr은 다음을 제공합니다.

drwx-wx-wt  2 root          root          4096 2010-05-25 12:39 php5

이 디렉토리 안에는 내 Apache 인 www-data가 소유 한 세션 파일이 있으며 앱이 제대로 작동합니다. 어떤 사용자가 세션 GC를 실행하는지 궁금합니다.



답변

수정 : 당신에 php.ini세트 session.gc_probability0


내가 여기에서 답을 찾았다 고 믿는 원인 http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage

기본적으로 가비지 수집은 일부 시스템 (예 : Ubuntu / Debian)에서 크론 작업에 의해 수행되도록 설정됩니다. php-cli와 같은 일부 php ini 실행 파일도 가비지 수집을 시도하므로 오류가 발생합니다.


답변

이것은 Ubuntu 서버의 일반적인 오류 인 것 같습니다 (Lucid LTS를 사용하고 있습니다). / var / lib / php5 디렉토리의 기본 권한은 다음과 같습니다.

drwx-wx-wt  2 root     root     4096 2011-11-04 02:09 php5

웹 서버에서 쓸 수는 있지만 읽을 수는 없으므로 오류를 설명하는 것 같습니다.

Ubuntu에는 cron ( /etc/cron.d/php5)을 통한 자체 가비지 정리 기능 이 있으므로 위에서 Diwant Vaidya가 제안한대로 PHP의 가비지 수집을 비활성화하는 것이 가장 좋습니다.

session.gc_probability = 0

실제로 세션 폴더가 세계에서 읽을 수 없어야하는 이유가 있습니다. PHP 매뉴얼에 따르면 :

이 설정을 / tmp (기본값)와 같이 세계에서 읽을 수있는 디렉토리로두면 서버의 다른 사용자가 해당 디렉토리에있는 파일 목록을 가져 와서 세션을 가로 챌 수 있습니다.


답변

내가 현재 사용하는 솔루션 (올바른 것인지 확실하지 않음)은 세션 폴더에 대한 소유권을 Apache 사용자 (제 경우에는 www-data)에게 제공하는 것입니다.


답변

이 문제는 한동안 나를 괴롭 혔습니다. php.ini에서 제안한대로 값을 변경했는데 문제가 계속 발생했습니다. index.php와 private / Zend / session.php에서도 동일한 구성 값을 찾았습니다. 따라서 문제가 계속 발생하면 좀 더 자세히 살펴볼 가치가 있습니다. 누군가에게 유용하기를 바랍니다.


답변