勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHPでユーザID毎にディレクトリを作成しキャッシュファイルを格納する方法

   2024/02/20  PHP

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

  関連記事

CodeIgniter4でのメール送信方法(テキスト・HTMLメール)
CodeIgniter4でのメール送信方法(テキスト・HTMLメール)

CodeIgniter4.4.4でテキストメール及びHTMLメールを送信したい。 ...

PHPのテンプレートエンジン「Twig」の使い方について簡易メモ
PHPのテンプレートエンジン「Twig」の使い方について簡易メモ

開発中の案件でテンプレートエンジンのTwigを利用する機会があった。使ってみた感 ...

Shift_JISでカタカナのソを出力するとエラー
Shift_JISでカタカナのソを出力するとエラー

先に結論として5C問題とかいうみたいで仕様らしい。 ■参考サイト http:// ...

Podmanで導入したPHPの設定ファイル(php.ini)変更と高速化に関する設定方法
Podmanで導入したPHPの設定ファイル(php.ini)変更と高速化に関する設定方法

Podmanで導入したPHPの設定ファイル(php.ini)の内容を変更したい。 ...

PHPでフォーム送信の際に禁止ワードのチェック及び制限をかける方法
PHPでフォーム送信の際に禁止ワードのチェック及び制限をかける方法

掲示板等のformを送信する際に特定の禁止ワードが含まれていないかチェックするプ ...