最初,我以为由于在 Codeigniter 中使用模块化扩展而导致加载库时出现问题。
但是我发现,即使全新安装了 codeigniter,我也无法加载
Session library
等库,甚至无法加载迁移库。
我总是收到类似的错误消息,通常与加载文件有关。
这是我使用会话库时出现的错误消息。
注意:如果我不使用库,一切都会正常工作。
错误:
遇到 PHP 错误
严重性:警告
消息:mkdir() [function.mkdir]:参数无效
文件名:drivers/Session_files_driver.php
线路号码:117回溯:
文件:index.php 专线:301 功能:require_once遇到未捕获的异常
类型:异常
消息:会话:配置的保存路径“”不是目录、不存在或无法创建。文件名:\system\libraries\Session\drivers\Session_files_driver.php
线路号码:119回溯:
文件:index.php 专线:301 功能:require_once
我觉得这是某种形式的权限问题,但无论我使用 AMPPS、MAMP (Windows) 还是 XAMP,我总是遇到这个问题。
大家有什么想法吗
操作系统:Windows 8.1
网络服务器:AMPPS/MAMP(Windows)/XAMP - 都有问题。
Codeigniter:v3.0.0
配置:
$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;
编辑:
已解决。
现在使用 CI3 文档很重要,当使用数据库方法进行会话时,请确保使用更新的 SQL 来创建表。
CREATE TABLE IF NOT EXISTS `ci_sessions` (
`id` varchar(40) NOT NULL,
`ip_address` varchar(45) NOT NULL,
`timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
`data` blob NOT NULL,
PRIMARY KEY (id),
KEY `ci_sessions_timestamp` (`timestamp`)
);
如此处所示。我希望这可以帮助任何遇到类似问题的人。
对于最初的问题,如果您使用
files
驱动程序,请确保将 $config['sess_save_path']
设置为 'ci_sessions'
之类的内容或您希望存储的任何位置。请参阅@Tpojka 答案以获取更多信息。
工作代码;
$config['sess_save_path'] = sys_get_temp_dir();
这允许执行脚本。
消息:会话:配置的保存路径“”不是目录,不存在或无法创建。
$config['sess_save_path'] = NULL;
尝试设置这个。
对我来说这个有效
$config['sess_save_path'] = '/tmp';
此代码在我的 MACOS 上适用于会话错误:
您需要将此代码添加到 config.php 文件中
您需要将
NULL
替换为 sys_get_temp_dir()
$config['sess_save_path'] = sys_get_temp_dir();
我的错误是:
警告:未捕获异常:会话:配置的保存路径“”不是目录、不存在或无法创建。在 /Library/WebServer/Documents/ci/fuse/system/libraries/Session/drivers/Session_files_driver.php:138 堆栈跟踪:#0 [内部函数]:CI_Session_files_driver->open('', 'ci_session') #1 /库/WebServer/文档/ci/fuse/system/libraries/Session/Session.php(143): session_start() #2 /Library/WebServer/Documents/ci/fuse/system/core/Loader.php(1281): CI_Session->__construct() #3 /Library/WebServer/Documents/ci/fuse/system/core/Loader.php(1174): CI_Loader->_ci_init_library('Session', 'CI_', NULL, 'session') # 4 /Library/WebServer/Documents/ci/fuse/system/core/Loader.php(1037): CI_Loader->_ci_load_stock_library('会话', '会话/', NULL, NULL) #5 /Library/WebServer/Documents/ ci/fuse/system/core/Loader.php(1082): CI_Loader->_ci_load_library('Session', NULL, NULL) #6 /Library/WebServer/Documents/ci/fuse/system/core/Loader.php(218 ): CI_Loader->_ci_load_library('Session', NULL, NULL) #7 /Library/WebServe 在 /Library/WebServer/Documents/ci/fuse/system/libraries/Session/drivers/Session_files_driver.php 第 138 行
致命错误:session_start():无法初始化存储模块:用户(路径:)在/Library/WebServer/Documents/ci/fuse/system/libraries/Session/Session.php第143行
打开 config.php 并创建一个具有
0755
权限的会话文件夹。
更新下面的代码变量
$config['sess_save_path'] = __DIR__ . '/session';
我今天也遇到这个问题了
谢谢 Sparky 和 Trojka,将我的配置设置为使用数据库而不是文件,使我的 CI 应用程序在我的本地服务器和实时服务器上都能完美运行。
方法如下:
$config['sess_driver'] = 'database'; // changed from file
$config['sess_save_path'] = 'ci_sessions'; // table name
Trojka发布的链接中有MySQL用于建表。
来自 CI3 文档: 默认情况下,会话初始化时将使用文件驱动程序,因为它是最安全的选择,并且预计可以在任何地方工作(几乎每个环境都有一个文件系统)。
所以默认的东西在Windows环境下工作得很好,但在Mac和Linux系统上我也遇到了类似的问题。
在不切换到数据库的情况下对我有用的东西:
第1步:创建具有适当权限的会话目录:
mkdir /<path to your application directory>/ci_sessions/
chmod 0700 /<path to your application directory>/ci_sessions/
chown _www /<path to your application directory>/ci_sessions/
注意 apache 用户名,它的变化如下:www-data、_www、apache 等。
第2步:设置sess_save_path配置的绝对路径: (我在 Mac 上的样子如下)
$config['sess_save_path'] ='/Library/WebServer/Documents/App/ci_sessions/';