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
関連記事
-
-
WordPressにてPHPのAPCuを使用して高速化を図る方法
先日本サイトのサーバにAPCuを導入した。しかしながら所感にも書いたとおりAPC ...
-
-
PhpSpreadsheetでフォーマット用のエクセルを読み込み、指定したセルにデータを書き込んだ上で別名で保存する方法
PHPで納品書等のフォーマット用のExcelを読み込み、指定したセルにデータを書 ...
-
-
PHPでvar_dumpをツールバー形式で表示するライブラリ「Kint」の使い方
PHPでvar_dumpを見やすくするためにdBugライブラリを利用しているが、 ...
-
-
CodeIgniter4でのメール送信方法(テキスト・HTMLメール)
CodeIgniter4.4.4でテキストメール及びHTMLメールを送信したい。 ...
-
-
PHPでランダムな値を取得したいケース諸々の対応方法
テストデータを作成する際にランダムな値を入れたかったけど、色々ケースがあったので ...