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
関連記事
-
PHPで配列を値で検索、破棄
PHPの配列で特定の値が入っていれば それを破棄したいということがあった。 ・u ...
-
PHPにて西暦から干支(十二支)を計算し表示する方法
先日MySQLにてSELECT時にdate型のカラムから干支(十二支)を計算し表 ...
-
複数(PHP / metaタグ / htaccess)の方法で301リダイレクト
サイトのディレクトリやファイル名を大幅に変えるという案件があった。それ自体は問題 ...
-
PHPにてSVGファイルをjpg / png画像に変換する方法
PHPにてSVGファイルをjpgもしくはpng形式の画像ファイルに変換したいとい ...
-
CodeIgniter4で特定のページにアクセスがあった際に301リダイレクトさせる方法
CodeIgniter4で特定のページにアクセスがあった際に301リダイレクトさ ...