Zend_Session / Zend_Auth случайным образом выдает сообщение об ошибке ps_files_cleanup_dir: opendir (/ var / lib / php5) failed: Permission denied (13)

В настоящее время я работаю над новым приложением, использующим (среди прочего) Zend_Auth, но по какой-то причине это сообщение об ошибке появляется в любом месте совершенно случайным образом (или так кажется)

Zend_Session::start() - /home/hannes/workspace/develop/library/Zend/Session.php(Line:480): Ошибка № 8 session_start() [function.session-start]: ps_files_cleanup_dir: opendir (/ var / lib / php5) не удалось: разрешение denied (13) Массив

  • # 0 /home/hannes/workspace/develop/library/Zend/Session/Namespace.php(143): Zend_Session :: start (истина)
  • # 1 /home/hannes/workspace/develop/library/Zend/Auth/Storage/Session.php(87): Zend_Session_Namespace -> __ construct ('Zend_Auth')
  • # 2 /home/hannes/workspace/develop/library/Zend/Auth.php(91): Zend_Auth_Storage_Session -> __ construct ()
  • # 3 /home/hannes/workspace/develop/library/Zend/Auth.php(141): Zend_Auth-> getStorage ()
  • # 4 /home/hannes/workspace/develop/xxxxxxx/application/controllers/AdminController.php(10): Zend_Auth-> hasIdentity ()
  • # 5 /home/hannes/workspace/develop/library/Zend/Controller/Action.php(133): AdminController-> init ()
  • # 6 /home/hannes/workspace/develop/library/Zend/Controller/Dispatcher/Standard.php(262): Zend_Controller_Action -> __ construct (Object (Zend_Controller_Request_Http), Object (Zend_Controller_Response_Http)
  • # 7 /home/hannes/workspace/develop/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard-> dispatch (Объект (Zend_Controller_Request_Http), Объект (Zend_Controller_Response_Http))
  • # 8 /home/hannes/workspace/develop/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front-> dispatch ()
  • # 9 /home/hannes/workspace/develop/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap-> run ()
  • # 10 /home/hannes/workspace/develop/xxxxxxx/public/index.php(26): Zend_Application-> run ()
  • # 11 {main}

person Hannes    schedule 28.05.2010    source источник


Ответы (6)


Решение состоит в том, чтобы установить для параметра session.save_path в файле php.ini доступный для записи каталог. например: session.save_path = "/ tmp". Отключение сборки мусора сеанса в первом примере - не лучшая идея. Второй пример не работает в Ubuntu 10.04.

person Toz    schedule 21.12.2010
comment
извини, только что подошел сюда. Это плохое решение. Почему? Поскольку предполагается, что никто, кроме root, не может войти в этот каталог. Я думаю, что на веб-сервере, на котором запущен php, каталог сеанса является одним из самых уязвимых каталогов. Предположим, у вас есть уязвимое веб-приложение, которое дает вам доступ на чтение к / tmp, злоумышленник может захватить любой активный в данный момент сеанс, только получив имена файлов. Бог знает, какие уязвимые данные лежат в самой сессии. Подводя итог, ОЧЕНЬ ПЛОХАЯ ИДЕЯ ПРОВОДИТЬ СЕССИИ ПОД / TMP. Конец истории! :) - person evildead; 02.11.2011
comment
@Hannes и всем остальным ... Пожалуйста, проверьте stackoverflow.com/q/3723316/415865, если вы сочтете нужным! - person Vikas; 24.11.2012

По-видимому, эта проблема затрагивает в основном (только?) Системы на основе debian / ubuntu и связана с автоматической сборкой мусора сеанса.

Переменная session.gc_probability была установлена ​​в 1 в php.ini, что означает, что сборщик мусора с вероятностью 1% запустит и очистит каталог / var / lib / php5, где хранятся сеансы php.

По-видимому, эта папка не доступна для записи www-данными, что приводит к указанной ошибке и вызывает исключение Zend. Установка session.gc_probability на 0 решила проблему. Папка сеанса все равно очищается заданием cron, поэтому сборщик мусора php даже запускать не нужно.

Из http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage

person robertbasic    schedule 28.05.2010
comment
уже пробовал тот, принес мне от 1 неудачи из 20 до 20 неудач из 20 :( - person Hannes; 31.05.2010
comment
+1: отличный ответ! Если ссылка не будет работать в будущем, вот решение: для переменной session.gc_probability было установлено значение 1 в php.ini, что означает, что сборщик мусора с вероятностью 1% запустит и очистит каталог /var/lib/php5, в котором находятся сеансы php. хранятся. Очевидно, эта папка не доступна для записи www-data, что приводит к указанной ошибке и вызывает исключение Zend. Установка session.gc_probability на 0 решила проблему. Папка сеанса все равно очищается заданием cron, поэтому сборщик мусора php даже запускать не нужно. - person Horen; 14.03.2013
comment
Получил ошибку, но у меня уже session.gc_probability = 0, так что это ничего не решило для меня. - person BadHorsie; 28.06.2017

Фактическое изменение каталога session.save_path отключает сборку мусора. Вот почему теперь это работает для вас. Если вам нужна сборка мусора, вы можете изменить первоначального владельца каталога на пользователя php «www-data».

chown www-данные / var / lib / php5

В качестве альтернативы вы можете написать сценарий сборки мусора для нового каталога.

person Rob    schedule 16.02.2011

У меня также была эта проблема с фреймворком Symfony, проблема в том, что php не имеет разрешения на каталог хранения сеанса. Просто измените каталог сохранения сеанса на доступный для записи. В файле конфигурации Zend Framework Bootstrap:

resources.session.save_path = APPLICATION_PATH "/../data/session"
person Brady Olsen    schedule 18.10.2010

Если вы используете PHP 7 в Ubuntu, убедитесь, что каталог сеансов PHP принадлежит веб-серверу:

sudo chown www-data:www-data /var/lib/php/sessions
person BadHorsie    schedule 06.07.2017
comment
Хм, спасибо ... я так и не решил эту проблему, но с другой стороны - это было 7 лет назад: D - person Hannes; 10.07.2017

У меня была эта проблема в OS X 10.8.4 с MAMP, используя первую Zend Framework. Каталог, установленный для session.save_path в php.ini по умолчанию - /Applications/MAMP/tmp/php. Я смог решить эту проблему, только удалив все в этом каталоге.

person Artem Gordinsky    schedule 03.07.2013