目次
動作環境
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__);