0

いくつかの画像をディレクトリにアップロードするスクリプトがあります。私は配列の助けを借りてそれを理解しています。したがって、私はこのコードを取得しました:

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

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

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

        if(!in_array(pathinfo($_FILES['image']['name'][$key], PATHINFO_EXTENSION), $allowed_extension)){
                die("Die!");
        }
    }

    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 = pathinfo($file_name, PATHINFO_EXTENSION);
       $file_extension = strtolower($file_extension);

         if (!in_array($file_extension, $allowed_extension)){
        $errors[$file_name][] = "format $file_extension in image $file_name is not accepted";
        continue;
         }

         if ($file_size > 2097152){
        $errors[$file_name][] = "maxsize of 2MB on $file_name has reached";
                    }

         if (count($errors) == 0){

        $dir = "a/b/c";

        if (is_dir($dir)){
            mkdir("a/b/c/tmp_images", 0755);
        }else{
            mkdir("a/b/c", 0755);
            mkdir("a/b/c/tmp_images", 0755);
        }

        $path = "a/b/c/tmp_images"; 
        $prifix = basename($file_name, "." . $file_extension);

        //var_dump ($prifix);

        $uploadfile = $path . "/" . $file_name;

        $x = 0;
        while (file_exists($uploadfile)){
               $x ++;
               $uploadfile = "{$path}/{$prifix}-{$x}.{$file_extension}";
            }

            if (move_uploaded_file($file_tmp, $uploadfile)){
               $file_name = basename($uploadfile);
               $output [$file_name] = "OK";

            }else{

            $output[$file_name] = "Failure while Uploading!";
            $errors[$file_name][] = "Failure: Can't move uploaded pictures!";
            }//else...
         }//if(count($errors))...
    }//foreach($_FILES['image']['name']... 
}//if(!empty($_FILES['image']['tmp_name'])... 

今、私の最初の問題は、2種類のファイルタイプがある場合、アップロードが中止され、エラーメッセージ「Die!」が表示されることです。が表示されます。コードでわかるように、最初のforeach-partがそれを行います。2番目のforeach-partは、実際に表示したいことを実行していますが、最初のforeach-partを離れると、1つの間違ったファイルタイプと1つの正しいファイルタイプの場合にアップロードが行われます。それに関する問題は、ユーザーがデータを送信した後に変更を加えることができないということです。そのため、アップロードを中止する必要があります。

2番目の問題は、最初のforeachパーツを残すと、ファイルタイプまたはサイズが間違っている場合のエラーメッセージを含む配列[0]のテキストではなく、「配列」だけが表示されることです。したがって、出力は「配列」ではなく、「$file_nameの最大サイズが2MBに達しました」である必要があります。

だから私はそれを解決する方法がわかりません。どうしたらいいか教えてくれる人がいれば本当にありがたいです。どうもありがとう。

4

1 に答える 1

1

die( "Die!");を使用しないでください。スクリプトの実行を終了するときにコード内で。ルートの原因を見つけるためにHTMLを提供します。

于 2012-04-11T16:28:38.130 に答える