質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.39%
phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

3回答

363閲覧

htaccessのフォルダの容量制限をしたい

nobu8

総合スコア2

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2024/06/13 00:25

編集2024/06/13 01:21

実現したいこと

レンタルサーバーの、PHPサイトです。

会員サイトを作った場合、会員の個人個人の画像アップロードするフォルダの、合計サイズの上限を設定したい。
全員のフォルダ内に、htaccessで上限サイズを書けばいいのだろうか?下位のサブフォルダにも適用したい。

会員が増えるたびに作成するのも大変なので、会員名のフォルダが作成される度に自動で作成される仕組みにしたい。
どちらも実現可能でしょうか?

発生している問題・分からないこと

1回にアップロードできる制限はわかる。
合計容量を制限しないと無限にアップロードされてパンクする。合計ファイル数も制限できるかな?
他の方法があるなら、そちらも検討したい。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

良い方法が見つからなかった

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobu8

2024/06/13 01:09

今の権限ではできないということですか?
nobu8

2024/06/13 01:22

レンタルサーバーの権限しかないので、OSをいじれません。
CHERRY

2024/06/13 10:40 編集

ちなみに 各会員は、どのような方法でアップロードを行うのでしょうか。
nobu8

2024/06/13 15:46

こんにちは! 会員はwordpressで増やしています。wordpressのメニューからアップロードです。htaccessでできるかと期待していたのですが、「会員がアップロードする→一時保存される→会員のフォルダに割り振られる→(合計で弾くスクリプトを作成)」が必要なようです。その必要なスクリプトが、会員ごとに会員の名前のフォルダを作成して保存するカスタムのプログラムと連動したものが必要なので、そのプログラムを作ってくれる作者に頼むしかないといった状況です。今のところ、そのフォルダ内に1人で最大までアップロード可能といった状況です。会員1人が最大まで使ったら、全滅です。思ったより大変な様なので、打開策なしです。
guest

回答3

0

基本はアップロードされる時に都度容量確認です。
アップロードされようとしているファイルのサイズ + その個人のアップロード済みのファイル < 個人に許されたストレージ容量 の時だけ、アップロードを完了させます。

  • 会員数は大きく変動しない
  • 全員で共有のストレージ容量

とのことなので、まずは上限値をどこかで決めます。$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/** 15 * 以降、既存のアップロード処理 16 */

会員システムとして使われているプラグインや、どこに個人のフォルダがあるか等が分かれば、
会員数や上記例でいうIDの取得の仕方、チェックするフォルダの場所の求め方がわかるかと思います。

後は画像アップロード処理を見つけて、上記のようなコードを書いてみてください。

投稿2024/06/13 17:48

sk_

総合スコア92

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

合計容量を制限しないと無限にアップロードされてパンク

会員一人当たりの容量を制限しても会員数が増えると同じ事でしょ?

他の方法があるなら

どうせアップロードする為に何らかのプログラムを書いているのだから、そのプログラム内で使用量やファイル数などをチェックすれば済む話では?

投稿2024/06/13 00:49

tezcello

総合スコア307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobu8

2024/06/13 01:07

補足、 会員数は固定になるので、自動で増えるといったことはありません。 手動で増減することはあります。
tezcello

2024/06/13 01:20

> 手動で増減する ならば、その増減するタイミングで「手動で」クオータを設定すれば良いのでは? __プログラム上ではエラーを補足しないと酷い表示になってしまうけど プログラムで諸々を調べるのは、会員数には直接無関係です。 __ただしサイトの全ストレージ容量との関係は無関係ではない
nobu8

2024/06/13 01:24

レンタルサーバーの権限しかないので、OSをいじれません。説明が足りなくてすいません。サーバーにhtaccessを置くまでの権限しか持ってません。phpやcgiは使えます。
tezcello

2024/06/13 01:55

何回も繰り返しですが、プログラムで必要なモノを調べて適宜処理する事は可能です。 クオータで制限する事が出来ればより強力になるだけの話です。 ただし、現在の環境がやりたいサービスに対して適切であるかの再検討は必要かもしれません。
tezcello

2024/06/15 03:56

特にプログラムするでもなく、何らかの設定一発だけでと言うのはムリでしょう。 また、WordPressを使いながらという事でしたら、PHP単体のプログラム知識の他に WordPressに対する十分な(プログラム的)知識も必要になる可能性があります。 __単なるアップロードではなく、WordPressがそのファイルを知っている必要があるなら尚更 世の中は広いので、そういうプラグインがあるのかもしれませんが、僕は知りません。
guest

0

OS側の処理になります

アプリ側の処理

PHPではアップロードされたファイルは一旦テンポラリ領域に保存され、その後move_uploaded_fileでユーザーの使用領域に任意に移動します。したがって、move_uploaded_fileするときに現状のユーザーの利用サイズを取得し、コピーしようとするファイルサイズを足して許容サイズ内であればmove_uploaded_fileするという処理にすればよいでしょう。

投稿2024/06/13 00:34

編集2024/06/13 03:53
yambejp

総合スコア116060

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2024/06/13 03:54

クォーターが使えないのであれば追記したようなアプリ側の処理でやればよいでしょう
nobu8

2024/06/13 15:52

こんにちは! 会員はwordpressで増やしています。wordpressのメニューからアップロードです。htaccessでできるかと期待していたのですが、「会員がアップロードする→一時保存される→会員のフォルダに割り振られる→(合計で弾くスクリプトを作成)」が必要なことまでわかりました。その必要なスクリプトが、会員ごとに会員の名前のフォルダを作成して保存するカスタムのプログラムと連動したものが必要なので、そのプログラムを作ってくれる作者に頼むしかないといった状況まで理解できました。今のところ、そのフォルダ内に会員1人で最大までアップロード可能で、1人で最大まで使われたら、全滅です。思ったより大変な様なので、打開策なしです。私のスキル不足なだけで、この返信で可能な事がわかったので、ありがたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.39%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問