【问题标题】:How to handle this "session failed to write file" error in PHP?如何在 PHP 中处理此“会话无法写入文件”错误?
【发布时间】:2010-05-12 23:27:14
【问题描述】:

我正在使用 Kohana 3 框架,并且正在使用本机会话驱动程序。

由于某种原因,会话有时无法写入其文件。

Warning: session_start() [function.session-start]: open(/tmp/sess_*****, O_RDWR) failed: Permission denied (13) in /home/site/public_html/system/classes/kohana/session/native.php  on line 27

我很确定 Kohana 有自己的内置错误处理程序,但它不会被此错误触发(即它显示为正常的 PHP 错误,而不是 Kohana 错误)。


(来源:alexanderdickson.com

任何曾经使用过 Kohana 的人都会注意到这似乎绕过了 Kohana 的错误处理(可能设置为 set_error_handler())。

有没有办法阻止此错误出现从本机会话(即基于文件)驱动程序切换?

我是否应该在Kohana 的核心代码中提供良好的引导并在session_start() 前面添加一个@ 错误抑制器?我应该放松error_reporting()吗?

谢谢

【问题讨论】:

  • 我有时在使用正常的会话处理时也会遇到这个问题。有时会话文件只是随机失去权限并且必须被删除。我不知道为什么会这样。
  • 请不要隐藏错误:)
  • @animuson 我知道,这是最奇怪的事情!它偶尔会非常发生,但我宁愿它根本不发生。

标签: php session error-handling kohana kohana-3


【解决方案1】:

您在 bootstrap.php 中调用ini_set('session.save_path', APPPATH.'sessions')(将APPPATH.'sessions' 替换为您想要的目录)以强制将会话写入application/sessions。这将提高使用本机会话的安全性,并且应该解决您的问题。

【讨论】:

    【解决方案2】:

    这取决于 php 的 session.save_path 指令,你可以将它覆盖到 php.ini 中的某个可写文件夹,或者你可以在你的 .htaccess 中尝试这个;

     php_value session.save_path '/path/to/folder/you/can/write'
    

    编辑:为了不忘记,将您的自定义会话文件夹级别放在 htdocs/public_html/whatever 之下。

    不过,这一切都有些矫枉过正,因为您可以礼貌地请您的服务器管理员检查权限问题。

    【讨论】:

      【解决方案3】:

      这意味着您的 php 解释器在 /tmp 中没有写入权限。 请您的服务器管理员解决这个问题 - 这与您的应用无关。

      如果来自不同 php 进程(在不同用户下运行)的会话文件发生冲突:为它们提供不同的会话临时目录会有所帮助。 例如,您可以将它们从 /tmp 移到 /path/to/homedir/phptmp 并使用如下结构:

      /path/to/homedir/
      /path/to/homedir/htdocs
      /path/to/homedir/phptmp
      /path/to/homedir/logs
      

      【讨论】:

      • 查看我的第二部分答案;)
      猜你喜欢
      • 1970-01-01
      • 2011-07-03
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多