ホームページ >データベース >mysql チュートリアル >PHP ファイルのアップロード検証コードが正しく機能しないのはなぜですか?

PHP ファイルのアップロード検証コードが正しく機能しないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-03 11:55:03664ブラウズ

Why Is My PHP File Upload Validation Code Not Working Correctly?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。