Zend_Session/Zend_Auth случайно генерирует сообщение об ошибке ps_files_cleanup_dir: opendir (/var/lib/php5) не удалось: разрешение отклонено (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) failed: Permission denied (13) Array
- # 0/home/hannes/workspace/develop/library/Zend/Session/Namespace.php(143): Zend_Session:: start (true)
- # 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 (Object (Zend_Controller_Request_Http), Object (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}
Ответы
Ответ 1
Решение состоит в том, чтобы установить файл session.save_path в файле php.ini в записываемый каталог.
например: session.save_path = "/tmp".
Переключение сборки мусора сеанса в первом примере не является хорошей идеей. Второй пример не работает на Ubuntu 10.04
Ответ 2
По-видимому, эта проблема затрагивает в основном (только?) системы debian/ubuntu и связана с автоматической сборкой мусора сеанса.
Переменная session.gc_probability была установлена в 1 в php.ini, что означает, что для сборщика мусора существует 1% -ная вероятность запуска и очистка каталога /var/lib/php 5, где хранятся сеансы php.
По-видимому, эта папка недоступна для записи через www-данные, что приводит к указанной ошибке и бросает исключение Zend. Установка session.gc_probability в 0 решило проблему. Папка сеанса в любом случае очищается заданием cron, поэтому нет необходимости даже запускать сборщик мусора php.
От http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage
Ответ 3
Фактически изменение каталога session.save_path отключает сбор мусора. Вот почему он теперь работает для вас. Если вы хотите сбор мусора, вы можете изменить оригинального владельца каталога на пользователя php "www-data"
chown www-data/var/lib/php5
В качестве альтернативы вы можете написать сборку мусора script для нового каталога.
Ответ 4
У меня также была проблема с картой Symfony, проблема в том, что php не имеет разрешения на каталог хранения сеансов. Просто измените каталог сохранения сеанса на место, где можно записывать файлы. В Zend Framework Bootstrap config ini:
resources.session.save_path = APPLICATION_PATH "/../data/session"
Ответ 5
У меня была эта проблема на OS X 10.8.4 с MAMP, используя первую Zend Framework. По умолчанию каталог session.save_path
в php.ini
по умолчанию: /Applications/MAMP/tmp/php
. Я смог решить это, только удалив все в этом каталоге.
Ответ 6
Если вы используете PHP 7.0
sudo chown www-data:www-data /var/lib/php/sessions