ログインフォームを作る際にセッションを利用しようとしましたが
A PHP Error was encountered
Severity: Warning
Message: mkdir() [function.mkdir]: No such file or directory
Filename: drivers/Session_files_driver.php
とか出てきて困りました。
セッションファイルの書き込みが出来ない事が原因のようなので、必要な対応と行うことにします。
対応方法は複数あるようです。
- config.phpで”sess_save_path”を指定し、ディレクトリを作成して書き込み権限を与え
- php.iniで”session.save_path”を指定し、ディレクトリを作成して書き込み権限を与える
- .htaccessで”session.save_path”を指定し、ディレクトリを作成して書き込み権限を与える
今回は2番目の方法を選択しました。
その前に、CodeIgniterのconfig.phpにおける”sess_save_path”は”NULL”になっていることを確認しておきます。
1.php.iniを確認&編集
中を確認してみるとセッションファイルを書き込む場所”session.save_path”が指定されていませんでした。
phpinfo()で現在のデフォルトのパスを調べる事は出来そうですが、調べた所で現在の状態ではどうしようもないので、とりあえず指定します。
今回は”tmp”ディレクトリを作って対応するので
session.save_path = "/home/ユーザー名/tmp"
と記述します。
パスはサーバーのルートから記述すべきで、これはFTPクライアントのパス表示部分や、レンタルサーバーのコントロールパネルのサーバー情報といったページや、サーバーへSSHログインしてpwdコマンドで調べるといった方法で知る事が出来ます。
2.php.iniの場所を指定する
環境によって、この作業自体が不要な場合もあるかもしれません。
.htaccessで下記のようにphp.iniの場所を指定します。
suPHP_ConfigPath /home/ユーザー名/html/アプリケーションフォルダ/
作成したphp.iniと.htaccessを転送します。
3.ディレクトリ作成と動作確認
指定した場所にディレクトリを作成し、書き込み権限を与えます。
セッションを開始して、画面にエラーが表示されることなく指定したディレクトリ内にファイルが書き込まれたら成功です。
何度かログイン&ログアウトを繰り返していると、ファイルが溜まっていくのが気になりましたが、調べてみるとセッションファイルについてはphp.iniの”session.gc_maxlifetime”の値を元に自動削除されるようです。
ただ、config.phpで指定した場合、これが行われるか不明です。