Загрузка нескольких файлов HTML 5 с помощью PHP


Вот код, который у меня есть, и мне интересно, что я делаю не так, что он не отображает имя.

<form action = "self.php" method="post" enctype="multipart/form-data">
<input type="file" name="imageURL[]" id="imageURL" multiple="" />
<input type="submit" value="submit" name="submit" />
</form>

И информация об обработке, которая не работает:

foreach ($_FILES['imageURL'] as $files[]) { 
    echo $files['file'];
}

Редактировать:

При изменении моего цикла foreach на:

foreach ($_FILES['imageURL'] as $file) { 
    echo $file['name'];
}

По-прежнему ничего не печатается.

Однако, когда я делаю что-то подобное:

foreach ($_FILES['imageURL']['name'] as $filename) { 
    echo $filename;
}

Имя файла печатается. Хотя я не знаю, что это значит.



РЕШЕННОЕ ОБНОВЛЕНИЕ:

Как связанная с Джоном Конде, структура чередования массивов отличается при загрузке нескольких файлов, чем при загрузке одного файла. Чтобы использовать foreach, мы должны реструктурировать массив.

$files=array();
$fdata=$_FILES['imageURL'];
if(is_array($fdata['name'])){
for($i=0;$i<count($fdata['name']);++$i){
        $files[]=array(
    'name'    =>$fdata['name'][$i],
    'type'  => $fdata['type'][$i],
    'tmp_name'=>$fdata['tmp_name'][$i],
    'error' => $fdata['error'][$i], 
    'size'  => $fdata['size'][$i]  
    );
    }
}else $files[]=$fdata;

ТЕПЕРЬ мы можем использовать foreach для цикла:

foreach ($files as $file) { 
    echo $file['name'];
}
Author: kylex, 2010-07-09

3 answers

Попробуйте

foreach ($_FILES['imageURL'] as $file) { 
    echo $file['name'];
}

ОБНОВЛЕНИЕ:

Google нашел этот учебник , который может помочь вам

 14
Author: John Conde, 2010-07-09 18:35:50

Вместо использования for() и пересчета количества элементов в массиве, вы можете использовать более элегантный foreach()

$files=array();
$fdata=$_FILES['file'];
if(is_array($fdata['name'])){
    foreach ($fdata['name'] as $i => $d) {
        $files[] = array(
        'name' => $d,
        'tmp_name' => $fdata['tmp_name'][$i]
        );
    }
}
else $files[]=$fdata;
 3
Author: kotekzot, 2012-06-06 02:10:54

Может быть, я ошибаюсь, но разве настройка multiple="" не отключит несколько загрузок? Просто используйте multiple самостоятельно, как показано в спецификации HTML5 или для совместимости с XHTML, multiple="multiple":

<input type="file" name="imageURL[]" id="imageURL" multiple />
 1
Author: Powerlord, 2010-07-09 18:39:49