Подтвердить что ты не робот

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

4b9b3361

Ответ 1

Исправление: В вашем 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, также пытаются делать сборку мусора, и это приводит к ошибке, которую вы получили.

Ответ 2

Это типичная ошибка на серверах Ubuntu (я использую Lucid LTS). Разрешения по умолчанию для каталога /var/lib/php 5 есть

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 ( по умолчанию), другие пользователи на сервере могут устраивать сеансы получение списка файлов в этом каталоге.

Ответ 3

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

Ответ 4

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