Codeigniter 无法加载库

问题描述 投票:0回答:6

最初,我以为由于在 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 答案以获取更多信息。

php codeigniter session
6个回答
95
投票

工作代码;

$config['sess_save_path'] = sys_get_temp_dir();

这允许执行脚本。


36
投票

消息:会话:配置的保存路径“”不是目录,不存在或无法创建。

$config['sess_save_path'] = NULL;

尝试设置这个。

对我来说这个有效

$config['sess_save_path'] = '/tmp';

10
投票

此代码在我的 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行


6
投票
  1. 打开 config.php 并创建一个具有

    0755
    权限的会话文件夹。

  2. 更新下面的代码变量

    $config['sess_save_path'] =  __DIR__ . '/session'; 
    

5
投票

我今天也遇到这个问题了

谢谢 Sparky 和 Trojka,将我的配置设置为使用数据库而不是文件,使我的 CI 应用程序在我的本地服务器和实时服务器上都能完美运行。

方法如下:

$config['sess_driver'] = 'database';       // changed from file
$config['sess_save_path'] = 'ci_sessions'; // table name

Trojka发布的链接中有MySQL用于建表。


2
投票

来自 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/';
© www.soinside.com 2019 - 2024. All rights reserved.