会话:配置的保存路径'C:\Windows\Temp'无法被PHP进程写入。

6
遇到了未捕获的异常
类型:异常
消息:会话:配置的保存路径'C:\Windows\Temp'不可写入PHP进程。
文件名:prm\system\libraries\Session\drivers\Session_files_driver.php 行号:125
回溯:
文件:\prm\application\controllers\login.php 行:8
函数:__construct
文件:\prm\index.php 行:279
函数:require_once 无法解决此问题。请建议如何解决。

add your code as well - Abdulla Nilam
C:\Windows\Temp,给予可写权限...我的意思是在Windows中从文件夹属性中取消只读标记。 - Haresh Vidja
5个回答

15
我们正在将 Windows 目录路径 'C:\Windows\Temp' 设置为数据库 ci_session 表。请在配置文件中更改以下内容。
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

$config['sess_driver']= 'database';
$config['sess_cookie_name']= 'mycookie';
$config['sess_expiration']= 0;
$config['sess_save_path']= 'ci_session';
$config['sess_match_ip']= FALSE;
$config['sess_time_to_update']= 300;
$config['sess_regenerate_destroy']= FALSE;
$config['sess_use_database']= TRUE;
$config['sess_expire_on_close']= TRUE;
$config['sess_table_name']= 'ci_session';

1
我在使用Codeigniter框架的Windows服务器中遇到了这个问题...上述解决方案已经修复了它。 - Vignesh Chinnaiyan
这个解决方案也帮助了我。 - Faisal
2
他不是说他想转换为数据库吗? - stackunderflow
我收到了三个错误: 1)ci_session不存在 2)消息:session_write_close():无法以递归方式调用会话保存处理程序 3)消息:session_write_close():使用用户定义的保存处理程序写入会话数据失败。(session.save_path:/opt/lampp/temp/) - questionbank
ci_session 表中的列是什么? - Hamza Zafeer

10

编辑config.php

位置:application/config/config.php

之前

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

之后

$sessDir = session_save_path();
$sessDir = "{$sessDir}/sessionPath";
is_dir($sessDir)?:mkdir($sessDir);

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = $sessDir;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

这对我起作用了


@Sanjay Khatri,很高兴认识你。 - Shamim Shaikh

1
在您的应用程序的config.php文件中搜索$config ['sess_save_path'],将其默认值sys_get_temp_dir()更改为另一个公共可访问目录,最好不在C:驱动器中。
或者您可以在php.ini文件中全局设置它,并调用ini_get('session.save_path'),但首先确保您已将该选项的默认值更改为您选择的临时目录。

它原本是 $config['sess_save_path'] = BASEPATH . 'cache/'; 我将其更改为 sys_get_temp_dir(); 现在它可以正常工作了。 - questionbank

0

这个错误基本上告诉您,PHP进程没有权限写入配置文件中指定的缓存目录。

最简单、最清晰的解决方法就是为该目录授予写入权限。

我不使用Windows机器,所以无法告诉您具体如何操作,但您可以查阅相关资料。


0

在使用Composer创建新的CodeIgniter 4项目后,我遇到了这个问题。

通常情况下,会话(session)被保存在php.ini中指定的文件夹中,通过设置session.save_path来进行配置。您可以通过调用以下代码来检查:

phpinfo();

寻找

session.save_path

我很惊讶地发现CodeIgniter试图将数据保存在不同的文件夹中。它在app/Config/Paths.php文件中进行配置。要查找的变量是
$writableDirectory

默认的代码行是

public string $writableDirectory = __DIR__ . '/../../writable

我试图从文件夹中移除只读标志,但是没有成功。某些进程或应用程序阻止了我进行移除(我怀疑是Google Drive)。注意:我使用的是Windows系统,但这并不重要...我想。

在旁边创建一个名为"writable2"的新文件夹,并更改设置为

public string $writableDirectory = __DIR__ . '/../../writable2

问题已解决。

仍不知道是哪个进程或应用程序更改了(并一直在更改)文件夹的只读属性。将名称从可写2更改回可写,问题又出现了。 但删除可写文件夹,然后将可写2文件夹重命名为可写可以解决问题。很奇怪!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接