2

次のHTMLおよびPHPコードを使用して、複数の画像をサーバーに移動しています。

コードを使用して、特定の入力要素をアップロードされたファイルに関連付ける方法はありますか?

したがって、forループでは、「 image_22 」からの画像がいつ処理されているかを検出できます。これは私の現在のコードを使用して可能ですか?

Dream worldは、値「image_22」を変数$imageNum内に格納します:-)

 

これが私が現在取り組んでいるものの抜粋です...

HTML:

<input id="image_22" name="images[]" type="file"  />
<input id="image_8" name="images[]" type="file"  />  
... 

PHP:

<?php
    if (isset($_POST['Submit'])) {
    $number_of_file_fields = 0;
    $number_of_uploaded_files = 0;
    $number_of_moved_files = 0;
    $uploaded_files = array();
    $upload_directory = dirname(__file__) . '/uploaded/'; //set upload directory


    /**
     * we get a $_FILES['images'] array ,
     * we procee this array while iterating with simple for loop
     * you can check this array by print_r($_FILES['images']);
     */
    for ($i = 0; $i < count($_FILES['images']['name']); $i++) {
        $number_of_file_fields++;
        if ($_FILES['images']['name'][$i] != '') { //check if file field empty or not
            $number_of_uploaded_files++;
            $uploaded_files[] = $_FILES['images']['name'][$i];
            if (move_uploaded_file($_FILES['images']['tmp_name'][$i], $upload_directory . 
    $_FILES['images']['name'][$i])) {
                $number_of_moved_files++;
            }

        }

    }
    echo "Number of File fields created $number_of_file_fields.<br/> ";
    echo "Number of files submitted $number_of_uploaded_files . <br/>";
    echo "Number of successfully moved files $number_of_moved_files . <br/>";
    echo "File Names are <br/>" . implode(',', $uploaded_files);
    }
    ?> 

ありがとうございました!!

4

1 に答える 1

5

HTMLで、その値を。内に含めるだけ[]です。

<input id="image_22" name="images[22]" type="file"  />
<input id="image_8" name="images[8]" type="file"  />  

ループでは、インクリメンタルforループの代わりに、foreachwithインデックスを使用します。これは、インクリメンタルタイプよりもPHPで一般的なパターンです。:$indexで指定された番号になり[]ます

// Loop over the ['name'] key in $_FILES['images'] to get all the named indexes
foreach ($_FILES['images']['name'] as $index => $filename) {

  if ($filename != '') {
     // not empty...
     $number_of_uploaded_files++;

     // Check for validity (see below)...

     // Use the name concatenated with _$index to supply store the index with the filename
     $uploaded_files[] = $filename . "_$index";
     if (move_uploaded_file($_FILES['images']['tmp_name'][$index], $upload_directory . $filename . "_$index")) {
       // successful rename
       $number_of_moved_files++;
     }
  }
}

スクリプトは現在、パスインジェクション攻撃に対して脆弱であることに注意してください。各ファイルのをフィルタリングして、ファイルをファイルシステムの任意の場所(Webサーバーで書き込み可能)に強制的に保存するnameようなものを含める必要があります。../許容値の正規表現で名前を確認することをお勧めします。

// Verify that the uploaded filename contains only letters, numbers, hyphen, underscore, space before the `.` and letters only after the `.`
// You could also insist that it end in `.(jpg|gif|png)` or whatever your acceptable formats are
// Most important is to prevent things like `../`
if (preg_match('/^[a-z0-9_- ]+\.[a-z]+$/i', $filename)) {
  // It's an ok filename
}
于 2012-11-28T15:07:16.850 に答える