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