Проблемы с загрузкой файлов PHP

У меня очень странная проблема с моим PHP-скриптом.

Я загружаю пару файлов, и PHP помещает их в одну папку. У меня проблемы с отправкой случайных файлов и отправкой случайных файлов. Поэтому я отладил его и получил очень странный результат из массива $ _FILES [].

Я попробовал это с 3 файлами.

$_FILES["addFile"]["name"] Содержит имена 3 файлов.

Вы ожидаете, что у вас будет $_FILES["addFile"]["tmp_name"]3 временных имени, которые PHP использует для копирования файлов, но это не так. Он содержит только одно имя. Другие 2 - пустые строки, которые выдают ошибку при загрузке (которую я подавляю из-за отображения)

Это очень странно. Я перепробовал несколько ситуаций, и это просто продолжает происходить. Это должно быть что-то в моих настройках или, возможно, даже мой код.

Вот мой код:

$i = 0;
  if (!empty($_FILES['addFile'])) {
    foreach($_FILES['addFile'] as $addFile) {
      $fileToCopy = $_FILES["addFile"]["tmp_name"][$i];
      $fileName   = $_FILES["addFile"]["name"][$i];
      $i++;
      if(!empty($fileToCopy)){
       $copyTo = $baseDir."/".$fileName;
       @copy($fileToCopy, $copyTo) or die("cannot copy ".$fileToCopy." to ".$copyTo);
      }
     }
          exit(0);
   }

Поскольку tmp_name пусто, значение if будет false, поэтому оно пропустит функцию die ().

Кто-нибудь знает, что может быть причиной этого?

Дополнительная информация: Я использую Windows XP, работает сервер WAMP. Никогда не было этой проблемы раньше, и я могу получить доступ ко всем картам, с которых я пытался загрузить. Настройки безопасности окон не могут быть проблемой, я думаю.

11.12.2008 11:23:12
3 ОТВЕТА
РЕШЕНИЕ

Удаляет, но, вероятно, не поможет: но move_uploaded_file - это (немного) лучший способ обработки загруженных файлов, чем копирование.

Являются ли какие-либо файлы большими? PHP имеет ограничения на размер файла и время, которое может потребоваться для их загрузки ...

Лучше отправить вас сюда, чем пытаться написать, что там написано:

http://uk3.php.net/manual/en/features.file-upload.common-pitfalls.php

1
11.12.2008 11:28:44
Это был действительно лимит размера файла, который сделал это для меня. Курс, мне придется посмотреть, как это преодолеть.
Vordreller 11.12.2008 11:39:55

Ваша логика цикла неверна. Вы используете цикл foreach непосредственно для входного имени файла, в котором хранятся несколько свойств, которые вас не интересуют («тип», «размер» и т. Д.).

Вы должны получить количество файлов из первого файла и использовать его в качестве длины цикла:

if (!empty($_FILES['addFile']) && is_array($_FILES['addFile']['name'])) {
    $length = count($_FILES['addFile']['name']);
    for($i = 0; $i < $length; $i++) {
        $result = move_uploaded_file($_FILES['addFile']['tmp_name'][$i],$baseDir."/" . $_FILES['addFile']['name'][$i]);
         if($result === false) {
            echo 'File upload failed. The following error has occurred: ' . $_FILES['addFile']['error'][$i];
         }
     }
}

Проверьте код ошибки, если у вас все еще есть проблемы, он должен предоставить всю информацию, необходимую для его отладки.

1
11.12.2008 11:34:54

Извините, но мне кажется, что вы пытаетесь загрузить все 3 файла с одинаковым именем переменной? Это правильно? Но это не будет работать, потому что они будут перезаписывать друг друга. Я думаю, что чем чище, тем лучше

    $i = 0;
    foreach($_FILES['addFile'.$i] as $addFile) {
     if(!empty($addFiles) {
        move_uploaded_file($addFile['temp_name'], 'YOUR DIRECTORY');
     }
      $i++;
   }
3
11.12.2008 11:50:28
Он может загрузить их, используя имя переменной массива (addFile [])
Eran Galperin 11.12.2008 12:58:22