【问题标题】:Codeigniter cannot load librariesCodeigniter 无法加载库
【发布时间】:2015-06-08 12:39:09
【问题描述】:

最初,我认为我在加载库时遇到了问题,因为在 Codeigniter 中使用了模块化扩展。

但是我发现即使全新安装了 codeigniter,我也无法加载诸如 Session library 之类的库,甚至无法加载 Migration 库。

我总是收到类似的错误消息,通常与加载文件有关。

这是我在使用 Session 库时收到的错误消息。

注意:如果我不使用库,一切正常。

错误:

遇到 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`)
);

如发现here。我希望这可以帮助任何有类似问题的人。

如果您使用的是files 驱动程序,请确保将$config['sess_save_path'] 设置为'ci_sessions' 或您希望存储的任何位置。有关更多信息,请参阅@Tpojka 答案。

【问题讨论】:

  • 你是如何加载会话库的?
  • $autoload['libraries'] = array('session');自动加载.php
  • 您从哪里下载 Codeigniter?那里有一些损坏的 CI 下载。
  • codeigniter.com - 它在我家里的 MAC OS 上完美运行,但在我的 Windows 上却出现了这些似乎是权限错误。
  • 另外,你的环境怎么样?视窗/Mac?什么版本?等等...

标签: php codeigniter session


【解决方案1】:

工作代码;

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

这允许执行脚本。

【讨论】:

  • 那个效果很好。将 sess_save_path 设置为 NULL 是默认设置,但它不起作用。当我在主机上运行 CI 时,您的解决方案运行良好。
  • 我输入这个字符串,页面就循环了
  • 这是正确的答案.. 恕我直言,我真的不知道为什么有人选择 Tpojka 的答案是正确的,如果用您自己的话来说,他说他刚刚阅读了错误并且只建议了一个选项.
【解决方案2】:

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

$config['sess_save_path'] = NULL;

尝试设置这个。

对我来说这个工作

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

【讨论】:

  • 为什么要设置路径?
  • CI2 如何处理会话?文件也是?
  • 我刚刚阅读了错误并提出了解决方案。 Afaik,会话完全用 CI3 重写。另外,我正在使用 DB 来存储此类信息,因此您可以尝试让我们知道是否已解决。 :)
  • @mdixon18,仅供参考,嵌入在 CodeIgniter config.php 文件中的“会话变量”cmets 部分详细介绍了每个选项。您不能'sess_save_pat' 设置为NULL,同时将'sess_driver' 设置为'files'。引用:“对于 'files' 驱动程序,它是可写目录的路径。警告:仅支持绝对路径!”
  • 如果您已经设置了数据库凭据,您可以在Session library page 上关注this section。如果没有,首先在您的应用程序中设置DB configuration。在文档中,建议使用 MySQL 或 PostreSQL 驱动程序。如果您遇到一些问题,请将其发布在此处或新主题中,或者很可能会找到已发布的内容。 :)
【解决方案3】:

此代码适用于我的 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/Documents/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('Session', 'Session/', 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 in /Library/WebServer/Documents/ci/fuse/system/libraries/Session/drivers/Session_fil es_driver.php 在第 138 行

致命错误:session_start():无法初始化存储模块:第 143 行 /Library/WebServer/Documents/ci/fuse/system/libraries/Session/Session.php 中的用户(路径:)

【讨论】:

    【解决方案4】:
    Step1 : open config.php and create a session folder with 0755 permission.
    Step2 : update below code variable 
    $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 建表。

    【讨论】:

    • 可以分享一下这个方法吗?
    • 只有这不是真正的答案。
    • 啊,是的,我读过这个。我希望有一种方法可以为不同的事物(例如应用程序和迁移)包含多种数据库方法。
    • 欢迎您@zbrka。我只希望你的昵称不代表你的代码。 :D
    【解决方案6】:

    来自 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/';
    

    【讨论】:

      猜你喜欢
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      相关资源
      最近更新 更多