我正在使用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()
吗?
由于
答案 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