Zend_Session/Zend_Auth随机抛出错误消息ps_files\u cleanup\u dir:opendir(/var/lib/php5)失败:权限被拒绝(13)

Zend_Session/Zend_Auth随机抛出错误消息ps_files\u cleanup\u dir:opendir(/var/lib/php5)失败:权限被拒绝(13),php,zend-framework,zend-auth,zend-session,Php,Zend Framework,Zend Auth,Zend Session,我目前正在使用Zend_Auth(除其他外)开发一个新的应用程序,但无论出于何种原因,此错误消息都会随机出现在任何位置(至少是这样) Zend_Session::start()-/home/hannes/workspace/develop/library/Zend/Session.php(第480行):错误#8Session_start()[function.Session start]:ps_files_cleanup_dir:opendir(/var/lib/php5)失败:权限被拒绝(13

我目前正在使用Zend_Auth(除其他外)开发一个新的应用程序,但无论出于何种原因,此错误消息都会随机出现在任何位置(至少是这样)

Zend_Session::start()
-/home/hannes/workspace/develop/library/Zend/Session.php(第480行):错误#8
Session_start()
[function.Session start]:ps_files_cleanup_dir:opendir(/var/lib/php5)失败:权限被拒绝(13)数组

  • #0/home/hannes/workspace/develop/library/Zend/Session/Namespace.php(143):Zend_Session::start(true)
  • #1/home/hannes/workspace/develope/library/Zend/Auth/Storage/Session.php(87):Zend_Session_Namespace->_构造('Zend_Auth'))
  • #2/home/hannes/workspace/develope/library/Zend/Auth.php(91):Zend\u Auth\u Storage\u Session->\u construct()
  • #3/home/hannes/workspace/develope/library/Zend/Auth.php(141):Zend_Auth->getStorage()
  • #4/home/hannes/workspace/develope/xxxxxxx/application/controllers/AdminController.php(10):Zend_Auth->hasintity()
  • #5/home/hannes/workspace/develope/library/Zend/Controller/Action.php(133):AdminController->init()
  • #6/home/hannes/workspace/develope/library/Zend/Controller/Dispatcher/Standard.php(262):Zend_Controller_Action->_构造(对象(Zend_Controller_Request_Http)、对象(Zend_Controller_Response_Http)、数组)
  • #7/home/hannes/workspace/develope/library/Zend/Controller/Front.php(954):Zend\u Controller\u Dispatcher\u Standard->dispatch(对象(Zend\u Controller\u Request\u Http)、对象(Zend\u Controller\u Response\u 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/develope/xxxxxxx/public/index.php(26):Zend_应用程序->运行()
  • #11{main}

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

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

显然,www数据无法写入此文件夹,导致上述错误并引发Zend异常。将session.gc_概率设置为0解决了该问题。会话文件夹无论如何都是由cron作业清理的,因此甚至不需要运行php垃圾收集器


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

resources.session.save_path = APPLICATION_PATH "/../data/session"

解决方案是将php.ini文件中的session.save_路径设置为可写目录。 例如:session.save_path=“/tmp”。
在第一个示例中关闭会话垃圾收集不是一个好主意。第二个示例在Ubuntu 10.04上不起作用,实际上更改会话的目录。save_路径会关闭垃圾收集。这就是为什么它现在对你有效。如果需要垃圾收集,可以将原始目录所有者更改为php用户“www data”

chown www.data/var/lib/php5


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

我在OSX 10.8.4和MAMP上遇到了这个问题,使用了第一个Zend框架。在
php.ini
中为
会话.save_path
设置的目录默认为
/Applications/MAMP/tmp/php
。我只能通过删除该目录中的所有内容来解决此问题。

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

sudo chown www-data:www-data /var/lib/php/sessions

已经试过了,让我从20次中的1次失败变为20次中的20次失败:(+1:回答得很好!如果链接将来不起作用,这里有一个解决方案:变量
session.gc_probability
php.ini
中设置为
1
,这意味着垃圾收集器运行并清理存储php会话的目录
/var/lib/php5
。App显然,这个文件夹不能被
www-data
写入,导致上述错误并引发Zend异常。将
session.gc\u probability
设置为
0
解决了这个问题。会话文件夹无论如何都是由cron作业清理的,因此php垃圾收集器甚至不需要运行。得到了错误,但我有
ssession.gc_probability=0
已经这样了,所以这对我来说没有解决任何问题。抱歉,只是出现在这里。这是一个糟糕的解决方案。为什么?因为除了root之外,没有人可以进入这个目录。我想在运行php的Web服务器上,会话目录是最易受攻击的目录之一。假设您有一个可利用的Web应用程序,它可以提供当您读取/tmp的访问权限时,攻击者只能通过获取文件名来劫持当前处于活动状态的任何会话。天知道会话本身存在哪些易受攻击的数据。总而言之,将会话置于/tmp下是一个非常糟糕的主意。故事结束!:)@汉内斯和所有其他人…请检查你是否找到相关性!嗯,谢谢…我从未真正解决过这个问题,但另一方面,那是7年前的事了:D