ホームページ >データベース >mysql チュートリアル >PHP ファイルのアップロード検証コードが正しく機能しないのはなぜですか?
PHP ファイルのアップロード: ファイルの種類とサイズの制限を確認する
PHP でファイルのアップロードを処理するには、多くの場合、ファイルの種類とサイズの制限を確認する必要があります。提供されたコード スニペットは両方の基準を検証しようとしますが、問題が発生します。コードを詳しく調べてエラーを特定しましょう。
<code class="php">//check file extension and size $resume = ($_FILES['resume']['name']); $reference = ($_FILES['reference']['name']); $ext = strrchr($resume, "."); $ext1 = strrchr($reference, ".");</code>
このコードは、両方のファイルのファイル名と拡張子をキャプチャします。ただし、その後の検証ロジックには欠陥があります。
<code class="php">if (!( ($_FILES["resume"]["type"] == "application/doc") || ($_FILES["resume"]["type"] == "application/docx") || ($_FILES["resume"]["type"] == "application/pdf") && (($_FILES["reference"]["type"] == "application/doc") || ($_FILES["reference"]["type"] == "application/docx") || ($_FILES["reference"]["type"] == "application/pdf")) && (($ext == ".pdf") || ($ext == ".doc") || ($ext == ".docx")) && (($ext1 == ".pdf") || ($ext1 == ".doc") || ($ext1 == ".docx")) && ($_FILES["resume"]["size"] < 400000) //accept upto 500 kb && ($_FILES["reference"]["size"] < 400000) )) { //stop user } else { //allow files to upload }</code>
コードは、ファイル タイプを検証するための正しいロジックを使用できません。 MIME タイプをチェックする代わりに、ファイル名拡張子に依存しますが、これは信頼性が高くありません。さらに、サイズ検証は両方のファイルに適用されません。
これらの問題を修正するために、MIME タイプを使用し、両方のファイル サイズを正しくチェックする改訂されたコード スニペットを次に示します。
<code class="php">function allowed_file() { $allowed = array('application/doc', 'application/pdf', 'application/docx'); if (in_array($_FILES['resume']['type'], $allowed) && in_array($_FILES['reference']['type'], $allowed)) { if ($_FILES["resume"]["size"] < 400000 && $_FILES["reference"]["size"] < 400000) { // Begin file upload here... } } }</code>
このコードまず、ファイルの MIME タイプが許可リストに含まれているかどうかを確認します。そうであれば、両方のファイル サイズが指定された制限内であるかどうかを確認します。これにより、許可されたファイルの種類とサイズのみがアップロードに受け入れられます。
以上がPHP ファイルのアップロード検証コードが正しく機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。