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
関連記事
Composer無し&ファイル1枚でPHPのエラーメッセージ画面をリッチにするライブラリ「PHP Error」の利用方法
先日PHPのエラーメッセージを見やすくするwhoopsの利用方法をメモしたが導入 ...
MySQLiでDELETE文
MySQLiでDELETE文 ■ソース $mysqli = new mysqli ...
PHPで配列のキーの最大値を取得する方法
配列のキーに整数値が入っていて、その中から最大値を取得したいケースがあった。調べ ...
PHPでPOST送信する際に多次元配列も送る方法
PHPでPOST送信する際に多次元配列も送りたかった。ただ普通に送ろうとするとO ...
画像をURLから取得して異なるサーバーにアップロード
■やりたかった事 ・画像があるサーバーはaaaサーバー ・アップロード先はbbb ...