web-dev-qa-db-ja.com

アップロードされたファイルの数を数えて制限する(HTMLファイル入力)

基本的な、よく知られた複数ファイルのアップロードフォームがあります。そんな感じ...

<input type="file" multiple="multiple" name="something[]" />

ユーザーが選択できるファイルの数を制限する方法(ハードコードされたオプションが望ましい)はありますか?制限とは、数を超えた場合の警告だけでなく、厳密にブロックされることを意味します。

前もって感謝します。 :)

22
Biker John

JavaScriptソリューションを実装して、選択されたファイルの数を確認できます。これを使用して、サーバーへのアップロードを禁止できます。いずれにしても、ユーザーがこれらのファイルをphpスクリプトに投稿するのを妨げるものは何もないので、この問題に対するクライアント側の解決策は実際にあります。最大アップロードサイズの制限を指定できますが、これはアップロードされるファイルの数に固有のものではありません。

あなたの最善の策は、いくつかのJavaScriptチェックを実装し、httpサーバー(またはPHP)に適切な最大アップロードサイズを指定し、アップロードされたファイルが最大数を超えている場合は無視することです。

選択したファイルの数を制限するには、こちらのHTML5ファイルAPIをお読みください: http://dev.w3.org/2006/webapi/FileAPI/

アップロードのサイズ制限を行う方法を説明するphp.iniのドキュメントは次のとおりです: http://php.net/manual/en/ini.core.php

コメントで提案されたように、チェックアウトしてください: http://php.net/manual/en/ini.core.php#ini.max-file-uploads

9
GoldenNewby

私たちは皆、配列でfirst element is stored in 0 th index, 2nd in 1st index......nth in (n-1)th indexであることを知っています

配列に5つのキーがあるため、常に5を返すcount($_FILES['something'])を取得できません

今問題は何をするかです$_FILES['something']['name'][0]含まれていますか? =>最初にアップロードされたファイルの名前

だからチェックして

if(empty($_FILES['something']['name'][0]))
{
     //checking whether a single file uploaded or not
     //if enters here means no file uploaded
     //so if you want you may put a check/validation here to make file
     //upload a must in your website
}
if(isset($_FILES['something']['name'][5]))
{
     //checking whether 6 files uploaded or not
     //so here you can put a check/validation to restrict user from
     //uploading more than 5 files
}
7

それを実行する純粋なJsの選択肢とはるかに:

https://cdnjs.com/ でも入手できます。

ploadify(flash based) など、一部のプラグインはこれを支援するようです。しかし、私はこれをどれだけ使用して、アップロードを制限できるかを彼らがどのように制限しているかを知るのに十分ではありません。

ploadify Multiple Uploads に関する詳細情報。

0
mikevoermans