27

我目前正在使用(除其他外)Zend_Auth 开发一个新应用程序,但无论出于何种原因,此错误消息完全随机出现在任何位置(或者它接缝)

Zend_Session::start()- /home/hannes/workspace/develop/library/Zend/Session.php(Line:480): Error #8 session_start()[function.session-start]: ps_files_cleanup_dir: opendir(/var/lib/php5) failed: Permission denied ( 13) 数组

  • #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 {主要}
4

6 回答 6

16

显然,这个问题主要影响(仅?)基于 debian/ubuntu 的系统,并且与自动会话垃圾收集有关。

变量 session.gc_probability 在 php.ini 中设置为 1,这意味着垃圾收集器有 1% 的概率运行并清理存储 php 会话的目录 /var/lib/php5。

显然这个文件夹不能被 www-data 写入,导致上述错误并抛出 Zend 异常。将 session.gc_probability 设置为 0 解决了这个问题。无论如何,会话文件夹都由 cron 作业清理,因此 php 垃圾收集器甚至不需要运行。

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

于 2010-05-28T21:33:44.950 回答
13

一种解决方法是将 php.ini 文件中的 session.save_path 设置为可写目录。例如:session.save_path = "/tmp"。在第一个示例中关闭会话垃圾收集不是一个好主意。第二个示例不适用于 Ubuntu 10.04

于 2010-12-21T13:13:18.857 回答
11

实际上更改 session.save_path 的目录会关闭垃圾收集。这就是为什么它现在适合你。如果您想要垃圾收集,您可以将原始目录所有者更改为 php 用户“www-data”

chown www-数据 /var/lib/php5

或者,您可以为新目录编写垃圾收集脚本。

于 2011-02-16T03:02:49.197 回答
5

Symfony 框架也有这个问题,问题是 php 没有会话存储目录的权限。只需将会话保存目录更改为可写的位置。在 Zend Framework Bootstrap 配置 ini 中:

resources.session.save_path = APPLICATION_PATH "/../data/session"
于 2010-10-18T08:19:11.183 回答
2

如果您在 Ubuntu 上使用 PHP 7,请确保 PHP 会话目录归 Web 服务器所有:

sudo chown www-data:www-data /var/lib/php/sessions
于 2017-07-06T12:57:49.763 回答
1

我使用第一个 Zend 框架在带有 MAMP 的 OS X 10.8.4 上遇到了这个问题。session.save_pathinphp.ini默认设置的目录是/Applications/MAMP/tmp/php. 我只能通过删除该目录中的所有内容来解决它。

于 2013-07-03T08:29:40.047 回答