Проблемы с 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 

Внутри этого каталога я вижу файлы сеансов, принадлежащие www-data, который является моим Apache, и приложение работает нормально. Что заставляет меня задаться вопросом, под каким пользователем работает сеанс GC?

Исправление: в вашем php.ini установите session.gc_probability на 0

Причина, по которой я верю, нашел ответ здесь: http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage

По сути, сбор мусора настраивается на работу cron на некоторых системах (например, Ubuntu / Debian). Некоторые исполняемые программы php ini, такие как php-cli, также пытаются делать сборку мусора, и это приводит к ошибке, которую вы получили.

Это типичная ошибка на серверах 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 ), вероятно, лучше всего отключить сбор мусора php, как было предложено выше Diwant Vaidya.

 session.gc_probability = 0 

На самом деле есть причина, по которой папка сеанса не должна читаться в мире – как написано в Руководстве по PHP :

Если вы оставите этот набор в общедоступном в мире каталоге, например / tmp (по умолчанию), другие пользователи на сервере смогут захватить сеансы, получив список файлов в этом каталоге.

Решение, которое я использую в настоящее время (что я не уверен, является правильным), заключается в том, чтобы предоставить владельцу сеанса доступ к пользователю Apache (www-data в моем случае).

Эта проблема несколько раз подтачивала меня. Я изменил значение, как было предложено в php.ini, и проблема продолжалась. Я нашел то же значение конфигурации в моем index.php, а также private / Zend / session.php. Поэтому стоит посмотреть немного глубже, если проблема будет продолжаться. Надеюсь, это полезно для кого-то.