2008-12-11 2 views
0

У меня возникла чрезвычайно странная проблема с моим скриптом PHP.Ошибка загрузки файла PHP

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

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

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

Ожидалось, что $_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 пуста, если значение будет ложным, так что собирается пропустить функцию матрицы().

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

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

ответ

1

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

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

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

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

+0

Это был действительно предел размера файла, который сделал это для меня. Cursus, мне нужно посмотреть, как это преодолеть. – Vordreller 2008-12-11 11:39:55

+0

Я имею в виду «curses» – Vordreller 2008-12-11 11:42:23

1

Ваша логика петли неверна , Вы используете цикл 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]; 
     } 
    } 
} 

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

3

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

$i = 0; 
    foreach($_FILES['addFile'.$i] as $addFile) { 
    if(!empty($addFiles) { 
     move_uploaded_file($addFile['temp_name'], 'YOUR DIRECTORY'); 
    } 
     $i++; 
    } 
Смежные вопросы