忘れないように記録しとこ

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

動作環境

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

 

 

この記事が気に入ったら
いいね ! しよう

Twitter で

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です