如何在PHP中处理此“会话无法写入文件”错误?

时间:2010-05-12 23:27:14

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

我正在使用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错误)。

PHP error http://alexanderdickson.com/hosted/stackoverflow.com/php-session-error.png

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

无论如何阻止此错误出现而不从切换本机会话(即基于文件)的驱动程序?

我是否应该好好练习启动,并在Kohana的核心代码中将@错误抑制器添加到session_start()?我应该放松error_reporting()吗?

由于

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

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

编辑:我不会忘记,将您的自定义会话文件夹级别置于htdocs / public_html / whatever之下。

尽管如此,所有这些都有点矫枉过正,因为您可以礼貌地询问服务器管理员以查看权限问题。

答案 2 :(得分:0)

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

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

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