PHPでユーザID毎にディレクトリを作成しキャッシュファイルを格納する方法
2024/02/20
PHPで作ったプログラム内にてユーザーID毎に特定のディレクトリを作成し、その中にキャッシュファイルを格納したかった。また、特定の動作(ログアウト等)を行った際は先ほど作成したディレクトリとキャッシュファイルを丸ごと削除したかった。以下に対応方法をメモ。
ディレクトリとファイルの作成の作成
#ディレクトリ名 $cache_dir = './cache/' . $user_id; #キャッシュファイル名 $cache_file = $cache_dir . '/' . date('YmdHis') . '.cache'; #ディレクトリの存在確認 if( !file_exists($cache_dir) ){ #存在しない場合はディレクトリを作成 mkdir($cache_dir); } #ファイルの作成 file_put_contents($cache_file, serialize($data), LOCK_EX);
file_existsでディレクトリの存在確認を行い、mkdirでディレクトリを作成するという形になる。尚、ディレクトリやファイルが作成できない場合は以下を疑う。
- ディレクトリが作成できない→親ディレクトリのパーミッションを755 / 777あたりに変更
- ファイルが作成できない→mkdirで作成する際に第2引数でパーミッションを0775 / 0777あたりに設定
ディレクトリの削除
function cacheDelete(){ $cache_dir = './cache/' . $user_id; $list = scandir($cache_dir); for( $i = 0; $i < count($list); $i++ ){ if( $list[$i] != '.' && $list[$i] != '..' ){ unlink($cache_dir . '/' . $list[$i]); } } rmdir($cache_dir); } #特定の動作の時にディレクトリを削除 if( $user_id != 123 ){ cacheDelete(); }
直接rmdirでディレクトリを削除しようとした場合、ディレクトリ内にファイルがあるとエラーが発生する。なので先にファイルを全て削除してからディレクトリを削除する必要がある。
リファレンス
http://php.net/manual/ja/function.mkdir.php
http://php.net/manual/ja/function.rmdir.php
http://php.net/manual/ja/function.file-exists.php
http://php.net/manual/ja/function.unlink.php
http://php.net/manual/ja/function.scandir.php
関連記事
-
-
PHPMailerでエラーメッセージ及びデバッグログの表示方法について
PHPMailerでエラーメッセージ及びデバッグログを表示させたいというケースが ...
-
-
PHPで指定したディレクトリ内のファイルを全てincludeする方法
PHPでライブラリを利用する際にcomposerからインストールしたものは「ve ...
-
-
PHPで数字をゼロパディング(ゼロ埋め)する方法
PHPで予め桁数を決めておいて、桁数未満の場合は0で埋めたい場合の対応方法をメモ ...
-
-
PHPで配列をGETパラメータ化、GETパラメータを配列化する方法
PHPで配列を「name=hoge&id=1&pass=fdkn ...
-
-
PHPからCSVファイルを出力する際にメモリを節約する方法
MySQLよりデータを大量に取り出してCSVファイル化し、ダウンロードさせるとい ...