基本はアップロードされる時に都度容量確認です。
アップロードされようとしているファイルのサイズ + その個人のアップロード済みのファイル < 個人に許されたストレージ容量 の時だけ、アップロードを完了させます。
- 会員数は大きく変動しない
- 全員で共有のストレージ容量
とのことなので、まずは上限値をどこかで決めます。$userStorageLimitが個人のストレージ容量になります。
php
1// 全体的な容量上限
2$totalStorageLimit = 10737418240; // 10GB
3
4// DBから 適当にユーザー数を取得
5$userCount = hogehoge();
6
7// ユーザー数で割り算
8$userStorageLimit = $totalStorageLimit / $userCount;
後はこのような指定ディレクトリのファイルサイズを取得する関数を定義しておいて
php
1function dir_size($dir) {
2 $handle = opendir($dir);
3 while ($file = readdir($handle)) {
4 if ($file != '..' && $file != '.' && !is_dir($dir.'/'.$file)) {
5 $mas += filesize($dir.'/'.$file);
6 } else if (is_dir($dir.'/'.$file) && $file != '..' && $file != '.') {
7 $mas += dir_size($dir.'/'.$file);
8 }
9 }
10 return $mas;
11}
ファイルのアップロードの直前にチェックを入れます。
※ユーザーやファイルを取り扱っているデータの形式等は不明なため適当な変数名で示します。
php
1$uploadFileSize = $_FILES['someuploadfile']['size'];
2
3// 仮に会員IDがフォルダ名になっているのなら、IDを取得
4$userId = $user['id'];
5
6// wpのuploadsディレクトリ以下、/kaiin/images/ユーザーID/ が保存場所だとしたら
7$userImageDirPath = wp_upload_dir().'/kaiin/images/'.$userid.'/';
8
9// 既存のファイルサイズ合計+アップロードしたファイルサイズが閾値より大きい場合はエラーを返す
10if( dir_size($userImageDirPath) + $uploadFileSize > $userLimit){
11 // ここでエラーメッセージとともに元のページへ返す
12}
13
14
会員システムとして使われているプラグインや、どこに個人のフォルダがあるか等が分かれば、
会員数や上記例でいうIDの取得の仕方、チェックするフォルダの場所の求め方がわかるかと思います。
後は画像アップロード処理を見つけて、上記のようなコードを書いてみてください。