Проблемы с PHP 5.3 и папкой сеансов


Я недавно обновился до PHP 5.3, и с тех пор я получаю (спорадические) сообщения об ошибках, которые указывают, что Apache (или, возможно, очиститель файлов сеансов) не имеет прав доступа к папке, в которой хранятся сеансы.
Это происходит случайным образом и не может быть воспроизведено с точными шагами, что заставило меня предположить, что это очиститель сеанса.
У кого-нибудь есть опыт работы с такими ошибками?

Сообщение об ошибке (которое выводится в строке session_start()):

Ps_files_cleanup_дир: ошибка opendir(/var/lib/php5): В разрешении отказано.

Ls-ltr в каталоге сеансов дает:

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

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

 77
Author: Itay Moav -Malimovka, 2010-05-25

4 answers

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

 118
Author: Diwant Vaidya, 2010-06-01 18:16:51

Похоже, это типичная ошибка на серверах 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, как предложил выше Дивант Вайдья.

session.gc_probability = 0

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

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

 22
Author: Marie Fischer, 2017-01-11 04:52:20

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

 1
Author: Itay Moav -Malimovka, 2010-05-25 20:09:06

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

 0
Author: ChrisFNZ, 2016-07-03 06:08:50