Проблемы с 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?
Ответы
Ответ 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. Поэтому стоит посмотреть немного глубже, если проблема сохранится. Надеюсь, что это кому-то полезно.