1

昨日、ディレクトリに画像をアップロードするためのアップロードファイルのコーディングを開始しました。配列を使用して、現在使用しているポイントに到達するためのより良い方法を処理する必要があることを認識しました。

 if(!empty($_FILES['image']['tmp_name'])){  

                $allowed_extension = array('jpg', 'jpeg', 'png', 'bmp', 'tiff', 'gif');

                foreach($_FILES['image']['name'] as $key => $array_value){

                    $file_name = $_FILES['image']['name'][$key];
                    $file_size = $_FILES['image']['size'][$key];
            $file_tmp = $_FILES['image']['tmp_name'][$key];

                    $file_extension = strtolower(end(explode('.', $file_name)));
                    if (in_array($file_extension, $allowed_extension) === false){
                        $errors[] = 'file is not accepted';
                        }

                    if ($file_size > 2097152){
                        $errors[] = 'maxsize: 2MB';
                        }

                    $path = "a/b/c/"; 
                    $uploadfile = $path."/".basename($_FILES['image']['name'][$key]);

                    if (move_uploaded_file($_FILES['image']['tmp_name'][$key], $uploadfile)){
                        echo "Das Bildmaterial wurde hochgeladen.";
                        }
                } 
        }

問題は、受け入れられないエンディングが与えられた場合でも、常にファイルをアップロードできることです。エラーメッセージをアップロードする代わりに表示する必要があるのに、なぜアップロードが発生するのかわかりません。コードに許可された拡張機能を埋め込むことで、セキュリティを強化したいと思います。私が間違っていることを教えてくれる人がいたら、本当にありがたいです。どうもありがとう。

4

2 に答える 2

1

「続行」を使用する必要があります

例えば

foreach($_FILES['image']['name'] as $key => $array_value){

    $file_name = $_FILES['image']['name'][$key];
    $file_size = $_FILES['image']['size'][$key];
    $file_tmp = $_FILES['image']['tmp_name'][$key];

    $file_extension = strtolower(end(explode('.', $file_name)));
    if (in_array($file_extension, $allowed_extension) === false){
        $errors[] = 'file is not accepted';
        continue;
    }

    // the rest of your loop goes here
}

その後、ループ内の次の画像に移動し、画像をアップロードしません。

詳細はこちら: http: //php.net/manual/en/control-structures.continue.php

于 2012-04-10T11:42:21.960 に答える
1

例外をチェックする2つのifステートメントがありますが、その後は何もしません。

おそらく次のことが役立つでしょうか?

if(!empty($_FILES['image']['tmp_name'])){  

    $allowed_extension = array('jpg', 'jpeg', 'png', 'bmp', 'tiff', 'gif');

    foreach($_FILES['image']['name'] as $key => $array_value){

        $file_name = $_FILES['image']['name'][$key];
        $file_size = $_FILES['image']['size'][$key];
        $file_tmp = $_FILES['image']['tmp_name'][$key];

        $errors = array ();
        $file_extension = strtolower(end(explode('.', $file_name)));
        if (in_array($file_extension, $allowed_extension) === false){
            $errors[] = 'file is not accepted';
        }

        if ($file_size > 2097152){
            $errors[] = 'maxsize: 2MB';
        }

        if (count ($errors) == 0) {
            $path = "a/b/c/"; 
            $uploadfile = $path."/".basename($_FILES['image']['name'][$key]);

            if (move_uploaded_file($_FILES['image']['tmp_name'][$key], $uploadfile)){
                echo "Das Bildmaterial wurde hochgeladen.";
            }
        }
        else {
            // do stuff with errors
        }
    }
}
于 2012-04-10T11:43:16.567 に答える