0

スクリプトを使用して、いくつかの画像をディレクトリにアップロードします。このコードは、画像が 1 つだけアップロードされる場合にうまく機能します。

2 つ以上の画像をアップロードしたいが、承認されていない拡張子を持つ場合、スクリプトはアップロードが許可されている拡張子を持つものをアップロードし、承認されていないものに関するエラー メッセージを表示しますが、アップロードは行われます。 . それが私の最初の問題です。

2 番目の問題: エラー メッセージの場合、どの画像が許可されないかを示すメッセージを表示したいと思います。エラーメッセージにエコーできる変数に、受け入れられない末尾を持つこの変数をフェッチする方法がわかりません。

私が使用するコードは次のとおりです。

<?php
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[] = 'its an unaccepted format in picture $variable_that_count';
            continue;
        }

        if ($file_size > 2097152){
            $errors[] = 'reached maxsize of 2MB per file in picture $variable_that_count';
        }

        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 "success.";
            }
        }
    }
}
?>

私が何にアプローチしたいのかが明確になることを願っています。助けてくれる人がいれば、本当に感謝しています。どうもありがとう。

4

1 に答える 1

1

これはあなたのために働くでしょう

サンプル HTML

<form action="" enctype="multipart/form-data" method="post">

    <p>
        Please specify a file, or a set of files:<br> <input type="file"
            name="image[]" size="40">
    </p>

    <p>
        Please specify a file, or a set of files:<br> <input type="file"
            name="image[]" size="40">
    </p>

    <p>
        Please specify a file, or a set of files:<br> <input type="file"
            name="image[]" size="40">
    </p>

    <p>
        Please specify a file, or a set of files:<br> <input type="file"
            name="image[]" size="40">
    </p>

    <p>
        Please specify a file, or a set of files:<br> <input type="file"
            name="image[]" size="40">
    </p>

    <div>
        <input type="submit" value="Send">
    </div>
</form>

PHPコード

$allowedExtention = 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 ) {

        $fileName = $_FILES ['image'] ['name'] [$key];
        $fileSize = $_FILES ['image'] ['size'] [$key];
        $fileTemp = $_FILES ['image'] ['tmp_name'] [$key];

        $fileExtention = pathinfo ( $fileName, PATHINFO_EXTENSION );
        $fileExtention = strtolower ( $fileExtention );

        if (! in_array ( $fileExtention, $allowedExtention )) {
            $errors [$fileName] [] = "File format $fileExtention not accepted for $fileName";
            continue;
        }

        if ($fileSize > 2097152) {
            $errors [$fileName] [] = 'reached maxsize of 2MB per file in picture $variable_that_count';
continue ;
        }

        if (count ( $errors ) == 0) {
            $path = "temp";
            $prifix = basename ( $fileName, "." . $fileExtention );

            var_dump ( $prifix );

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

            if (move_uploaded_file ( $fileTemp, $uploadfile )) {
                $fileName = basename ( $uploadfile );
                $output [$fileName] = "OK";
            } else {
                $output [$fileName] = "ERORR";
                $errors [$fileName] [] = "Can Move uploaded file to destination";
            }
        }
    }
}

var_dump ( $errors );
var_dump ( $output );

サンプル出力

string '79534296' (length=8)
string '89773706' (length=8)
array
  'download (1)' => 
    array
      0 => string 'File format  not accepted for download (1)' (length=42)
  'brief.docx' => 
    array
      0 => string 'File format docx not accepted for brief.docx' (length=44)
  '' => 
    array
      0 => string 'File format  not accepted for ' (length=30)
array
  '79534296-2.jpg' => string 'OK' (length=2)
  '89773706-2.jpg' => string 'OK' (length=2)

編集 1

すべてのファイルが有効でなければならない場合、それを達成する方法は 2 つあります。

A. 最初にすべてのファイルを検証することから始めます。

foreach ( $_FILES ['image'] ['name'] as $key => $array_value ) {
    if(! in_array (pathinfo ($_FILES ['image'] ['name'] [$key], PATHINFO_EXTENSION ), $allowedExtention ))
    {
        die("Die! Die! Die") ;
    }
}

foreach ( $_FILES ['image'] ['name'] as $key => $array_value ) {
  // Upload Script here 
 }

B. エラーが検出された場合は、すべてのファイルを削除します

foreach ( $_FILES ['image'] ['name'] as $key => $array_value ) {
  // Upload Script here 
 }

// Remove All Files
if(count($errors) > 0)
{
    foreach ($output as $key => $value)
    {
        @unlink($path . "/" . $key);
    }

    die("Die! die! die!") ;
}

これが役立つことを願っています

于 2012-04-10T19:23:16.337 に答える