mdixon18
mdixon18

Reputation: 1219

Codeigniter cannot load libraries

Initially, I thought I had a problem with loading libraries due to using Modular Extensions inside Codeigniter.

However I have discovered even with a clean install of codeigniter I am unable to load libraries such as the Session library or even the Migration library.

I always get similar error messages usually to do with loading files.

Here is my error message I have when using the Session library.

Note: If i don't use libraries everything works fine.

Error:

A PHP Error was encountered
Severity: Warning
Message: mkdir() [function.mkdir]: Invalid argument
Filename: drivers/Session_files_driver.php
Line Number: 117

Backtrace:
File: index.php Line: 301 Function: require_once

An uncaught Exception was encountered
Type: Exception
Message: Session: Configured save path '' is not a directory, doesn't exist or cannot be created.

Filename: \system\libraries\Session\drivers\Session_files_driver.php
Line Number: 119

Backtrace:
File: index.php Line: 301 Function: require_once

I feel like this is some form of permissions issue, but whether I am using AMPPS, MAMP (Windows) or XAMP I always get this problem.

Does anyone have any ideas

OS: Windows 8.1

Webserver: AMPPS/MAMP(Windows)/XAMP - All have the problem.

Codeigniter: v3.0.0

Config:

$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;

EDIT:

Resolved.

It's important now that you use the CI3 Documentation, When using the database method for sessions please ensure you use the updated SQL to create the table.

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

As found here. I hope this helps anyone out with similar problems.

Also for the initial problem if you are using the files driver please ensure you set the $config['sess_save_path'] to something like 'ci_sessions' or wherever you wish to store. Please see @Tpojka answer for more information.

Upvotes: 31

Views: 90807

Answers (6)

Brijmohan Karadia
Brijmohan Karadia

Reputation: 447

  1. Open config.php and create a session folder with 0755 permission.

  2. Update below code variable

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

Upvotes: 6

Tpojka
Tpojka

Reputation: 7111

Message: Session: Configured save path '' is not a directory, doesn't exist or cannot be created.

$config['sess_save_path'] = NULL;

Try to set this one.

For me This one worked

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

Upvotes: 37

Vijay Jakhar
Vijay Jakhar

Reputation: 111

This Code is working for on my MACOS for session error :

You need to add this code into config.php file

you need to replace NULL with sys_get_temp_dir()

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

My error was :

Warning: Uncaught Exception: Session: Configured save path '' is not a directory, doesn't exist or cannot be created. in /Library/WebServer/Documents/ci/fuse/system/libraries/Session/drivers/Session_files_driver.php:138 Stack trace: #0 [internal function]: CI_Session_files_driver->open('', 'ci_session') #1 /Library/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_files_driver.php on line 138

Fatal error: session_start(): Failed to initialize storage module: user (path: ) in /Library/WebServer/Documents/ci/fuse/system/libraries/Session/Session.php on line 143

Upvotes: 11

Nill
Nill

Reputation: 1061

Working code;

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

This allows to execute the script.

Upvotes: 96

Himanshu Saini
Himanshu Saini

Reputation: 812

From CI3 Docs: By default, the Files Driver will be used when a session is initialized, because it is the most safe choice and is expected to work everywhere (virtually every environment has a file system).

So default thing works good on windows environment but on mac and linux systems I have faced similar issues.

Thing that worked for me without switching to Database:

Step 1: create session directory with proper permissions:

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/

Take care of apache username it varies like: www-data, _www, apache etc.

Step 2: Set absolute path for sess_save_path config: (Mine on Mac looked like below)

$config['sess_save_path'] ='/Library/WebServer/Documents/App/ci_sessions/';

Upvotes: 2

zbrka
zbrka

Reputation: 61

I also run into this problem today.

Thank you Sparky and Trojka, setting my config to use database instead file made my CI app working perfectly, both on my local server and live one.

Here is how:

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

There is MySQL for table creation in link Trojka posted.

Upvotes: 5

Related Questions