当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Zend_Session/Zend_Auth随机抛出错误消息ps_files_cleanup_dir:opendir(/var/lib/php5)失败:权限被拒绝(13)》经验,为你挑选了4个好方法。

我正在使用Zend_Auth(除其他外)使用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)失败:权限被拒绝( 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),Array)

#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}

小智.. 16

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

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

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

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



1> 小智..:

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

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

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

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


+1:很棒的答案!如果链接将来不起作用,这里是解决方案:变量`session.gc_probability`在`php.ini`中设置为`1`,这意味着垃圾收集器运行的概率为1%并清理存储php会话的目录`/ var/lib/php5`.显然这个文件夹不能被`www-data`写入,导致上述错误并抛出Zend异常.将`session.gc_probability`设置为'0`解决了这个问题.无论如何,会话文件夹由cron作业清理,因此不需要php垃圾收集器甚至运行.

2> 小智..:

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


对不起,刚刚来到这里.这是一个糟糕的解决方案.为什么?因为除了root之外的任何人都可以进入此目录.我认为在运行php的网络服务器上,会话目录是最脆弱的目录之一.假设您有一个可利用的Web应用程序,它为您提供对/ tmp的读取权限,攻击者只能通过获取文件名来劫持当前处于活动状态的任何会话.上帝知道会话本身中哪些易受攻击的数据.总而言之,在TMP下提供会议是一个非常糟糕的想法.故事结局!:)

3> 小智..:

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

chown www-data/var/lib/php5

在替代方案中,您可以为新目录编写垃圾收集脚本.



4> 小智..:

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

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

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有