続・CodeigniterでSessionを使おうとした時にエラーが出る

2016年10月31日

動作環境

PHP: 7.0.7 (phpenv)
Codeigniter: 3.1.1
vagrant

 

前回の続き

前回「CoteigniterでSessionを使おうとしたらエラーになった」という記事を書きました。

これは、これで完結した内容なのですが、php.ini の設定がいじれないよーうわーんな方が居たので、別の方法を書きます(一昨日知ったばかり)。

 

Config.phpを確認

Codeigniterには、「config.php」という設定ファイルが存在していて、
その中に、sessionの設定をする箇所があります。

で、今回問題になっているのは、


$config['sess_driver'] = 'files';

このsessionの保存形式を「files」にしている時です。

この時に、


$config['sess_save_path'] = NULL;

sess_save_path がNULLの時は、前回設定したphp.iniの「session.save_path」に従って保存されます。

しかし、設定されていない時には?
これはエラーです。

では、以下の設定をした時には?


$config['sess_cookie_name'] = 'ci_session';
$config['sess_save_path'] = 'session';

この場合は、php.iniの設定次第ですが、デフォルト設定なら index.php と同じ階層に session フォルダーを作ってその中に保存されます。

一見、これで大丈夫そう!と思いがちですが、これで試してみると、以下のエラーが表示されてしまいます。


A PHP Error encountered
Severity: Warning
Message: touch(): Unable to create file session/ci_sessionh34gh5ghyu5hhghshyt because No such file or directory
Filename drivers/Session_files_driver.php
Line Number: 248
Backtrace;


A PHP Error encountered
Severity: Warning
Message: Unknown: Failed to write session data (user). Please verify that the current setting of session.save_path is corrent (session)
Filename Unknown
Line Number: 0
Backtrace;

むう、なんだこれ?

 

絶対パスを使おう!

github のissuesを見たら、同じような人がいました。

https://github.com/bcit-ci/CodeIgniter/issues/3664

なるほど、絶対パスを設定してねー、てことですか。
つまり以下の設定で良さそう。
※設定例の「sess_save_path」は適当に記入してます。


$config['sess_cookie_name'] = 'ci_session';
// 絶対パスを指定
$config['sess_save_path'] = '/home/kabanoki/session';

 

これでOK

 

おまけ

保存先の絶対パスがわからないよーとい方は、いかのPHP関数を使うと幸せになるかも


//現在地のパスを調べる
echo dirname(__FILE__);

 

 

  • この記事を書いた人

カバノキ

印刷会社のWEB部隊に所属してます。 WEB制作に携わってから、もう時期10年になります。 普段の業務では、PHPをメインにサーバーサイドの言語を扱っています。 最近のお気に入りはJavascriptです。 Vue.jsを狂喜乱舞しながら、社内に布教中です。

-CodeIgniter
-, ,