PHPがインストールされたApacheサーバーの場合、次の2つの方法でこのプロセスを制限できます。
- ファイルのアップロードをPHP設定に制限する
- フォーム要求をサーバーに送信するメカニズムを使用してファイルのアップロードを制限する(POSTメソッドのみ)
検討したいと思います。
したがって、フォームで
method="post"
enctype="multipart/form-data"
、
enctype="multipart/form-data"
から始めましょう。 次に、非表示のフォーム要素を作成します。
<input type="hidden" name="MAX_FILE_SIZE" value="1111111">
MAX_FILE_SIZE要素の値では、必要なダウンロードファイルの最大サイズをバイト単位で指定します。
この要素はファイル選択フィールドの前 (たとえば、formタグの直後)でなければならないという事実に特に注意する必要があります。
例:
<form method="post" .... enctype="multipart/form-data">
<input type="hidden" name="max_file_size" value="1111111">
...
<input type="file" name="photo" >
...
</form>
実際に行われること(PHPとApacheの一部の構成ではこの方法が禁止されています):
PHPは最初にファイルサイズ制限オプションを取得します。 次に、その値を読み取り、ファイルサイズが必要なサイズを超えた$ _FILES配列の要素を「ダンプ」します。
彼がそのような要素で何をするかの例:
Array ( [photo] => Array ( [name] => my_photo.jpg [type] => [tmp_name] => [error] => 2 [size] => 0 )
ご覧のとおり、彼はそのような要素に0以外のエラーコードを設定し(0 =アップロード成功)、このエラーは「アップロードされたファイルはHTMLフォームで指定されたMAX_FILE_SIZEディレクティブを超えています」または「ダウンロードされたファイルのサイズはHTMLフォーム。」
注意:
- 一部のブラウザーは(このディレクティブを使用して)サーバー自体へのファイルのアップロードを遮断できます(この効果の性質は個人的には知られていないため、ブラウザーのドキュメントで見つけることができませんでした)
- これは必須のブラウザディレクティブではありません。
- ブラウザでは、この制限は簡単に回避できます
- Mozilla Firefox(バージョン2および3でテスト済み)では、ブラウザー側の制限は機能しませんでした
- IEでは、6番目のバージョン(以前のバージョンではテストしませんでした)およびOpera(8.5番目のバージョンから開始)で動作しました
-
理論的には(私は自分でチェックしませんでした)MAX_FILE_SIZEフォームの制限パラメーターは、 php.iniのupload_max_filesizeパラメーターよりも高くなっています
php.netのメカニズムの詳細な説明
PS:この記事が多くのコーダー、特にサーバーのPHP設定を変更するサーバー権限を持っていない人に役立つことを願っています。
ZZY:私のトピックでは、メカニズムの1つとそれを使用した経験を説明したかっただけです。 これは、 追加の 、場合によっては便利な検証メカニズムにすぎないため、必須のアクションのガイドではありません。
ZZZY:コメントのステートメント、要望、紛争、アドバイスを考慮して編集。