【问题标题】:Zend_Session / Zend_Auth randomly throws Error Message ps_files_cleanup_dir: opendir(/var/lib/php5) failed: Permission denied (13)Zend_Session / Zend_Auth 随机抛出错误信息 ps_files_cleanup_dir: opendir(/var/lib/php5) failed: Permission denied (13)
【发布时间】:2010-05-28 16:46:15
【问题描述】:

我目前正在使用(除其他外)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 {主}

【问题讨论】:

    标签: php zend-framework zend-auth zend-session


    【解决方案1】:

    显然,这个问题主要影响(仅?)基于 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

    【讨论】:

    • 已经试过了,把我从 20 次中的 1 次失败到 20 次中的 20 次失败 :(
    • +1:很好的答案!万一链接将来无法工作,解决方案如下:php.ini 中的变量 session.gc_probability 设置为 1,这意味着垃圾收集器有 1% 的概率运行并清理存储 php 会话的目录 /var/lib/php5。显然,www-data 无法写入此文件夹,从而导致上述错误并引发 Zend 异常。将session.gc_probability 设置为0 解决了这个问题。会话文件夹无论如何都会被 cron 作业清理,因此 php 垃圾收集器甚至不需要运行。
    • 得到了错误,但我已经有session.gc_probability = 0,所以这并没有为我解决任何问题。
    【解决方案2】:

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

    【讨论】:

    • 抱歉,刚上来。这是一个糟糕的解决方案。为什么?因为除了root之外没有人可以进入这个目录。我认为在运行 php 的网络服务器上,会话目录是最容易受到攻击的目录之一。假设你有一个可利用的 webapp,它允许你读取 /tmp,攻击者可以通过获取文件名劫持当前处于活动状态的任何会话。天知道会话本身中有哪些易受攻击的数据。总而言之,将会话放在 /TMP 下是一个非常糟糕的主意。故事结局! :)
    • @Hannes 和所有其他人...如果您发现相关性,请检查stackoverflow.com/q/3723316/415865
    【解决方案3】:

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

    chown www-data /var/lib/php5

    您也可以为新目录编写垃圾回收脚本。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

        • 嗯,谢谢……我从来没有真正解决过这个问题,但另一方面——那是 7 年前的事了:D
        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 2022-01-02
          • 2021-01-31
          • 1970-01-01
          • 2012-06-01
          • 2019-06-18
          • 1970-01-01
          • 2016-03-26
          • 2013-08-31
          • 1970-01-01
          相关资源
          最近更新 更多