php загрузка нескольких файлов - PullRequest
0 голосов
/ 06 октября 2010

У меня есть скрипт, который я разрабатываю для загрузки до 10 файлов одновременно.У меня есть 10 отдельных входов в моем html:

  <?php
    for($i=0;$i<10;++$i) {
         $num = $i+1;
         echo '
            <span>'.$num.'</span><input type="file" name="photo'.$i.'" />
              ';
     }
  ?>

А потом у меня есть мой загрузчик, который я использовал раньше - в несколько ином виде - но не могу приступить к работе сейчас:

$path = "../path/to/folder/";
for($i = 0; $i < 20; $i++){
  $fileName = "photo". "$i";
  $filePath = "$path". "photo$i.jpg";

  if (!empty($_FILES['$fileName']['tmp_name'][$i])) {
       if (!copy($_FILES['$fileName']['tmp_name'][$i], $filePath)) {
            echo "failed to save '.$filePath.'";
        }
       chmod($filePath, 0644);
     }
 }

В рабочей версии этого скрипта я обрезал цикл for и просто нумеровал каждую загрузку по отдельности (у меня был этот фрагмент кода без цикла 10 раз, каждый со своим собственным номером).Это сработало замечательно, но смотреть на такой кусок кода было бы довольно уродливо.Любые идеи, как сделать эту работу?

ОБНОВЛЕНО:

Все еще не повезло, я ценю всю помощь.Я думаю, что моя проблема заключается в том, что массивы $ _FILES не заполняются должным образом:1017 *

Ответы [ 3 ]

3 голосов
/ 06 октября 2010

Вы используете $i дважды:

$_FILES["$fileName"]["tmp_name"][$i]

часть [$i] не имеет смысла для меня: вы уже получаете доступ к каждому элементу через $fileName. Я думаю, вам нужно просто избавиться от [$i].

2 голосов
/ 06 октября 2010

Я полагаю (частично), что ваша проблема заключается в цитировании. Вы используете одинарные кавычки в цикле, что приводит к тому, что переменные не оцениваются. Попробуйте использовать приведенный ниже код. Могут быть и другие проблемы, но это должно решить один аспект вашей проблемы.

$path = "../path/to/folder/";
for($i = 0; $i < 20; $i++){
  $fileName = "photo". $i;
  $filePath = "$path". "$fileName.jpg";

  if (!empty($_FILES["$fileName"]['tmp_name'][$i])) {
       if (!copy($_FILES["$fileName"]['tmp_name'][$i], $filePath)) {
            echo "failed to save $filePath";
        }
       chmod($filePath, 0644);
     }
 }
0 голосов
/ 06 октября 2010

ты слишком усложнил
пока ничего не может быть проще
просто foreach за $ _FILES

foreach ($_FILES as $file) {
  $filePath = $path. "photo".($i++).".jpg";
  if (!$file['error']) {
    move_uploaded_file($file['tmp_name'], $filePath));
  }
}

вот и все для первого соглашения об именах.

...