Проблемы с загрузкой файлов PHP - PullRequest
0 голосов
/ 11 декабря 2008

У меня очень странная проблема с моим 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. Никогда не было этой проблемы раньше, и я могу получить доступ ко всем картам, с которых я пытался загрузить. Я думаю, что настройки безопасности Windows не могут быть проблемой.

Ответы [ 3 ]

3 голосов
/ 11 декабря 2008

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

    $i = 0;
    foreach($_FILES['addFile'.$i] as $addFile) {
     if(!empty($addFiles) {
        move_uploaded_file($addFile['temp_name'], 'YOUR DIRECTORY');
     }
      $i++;
   }
1 голос
/ 11 декабря 2008

Ваша логика цикла неверна. Вы используете цикл 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 декабря 2008

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...