2010-07-09 4 views
12

Вот код, который у меня есть, и мне интересно, что я делаю неправильно, что оно не отображает имя.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']; 
} 

Edit:

При смене моего цикла Еогеасп к:

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

Еще ничего не печатает ,

Однако, когда я делаю что-то вроде этого:

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

Имя файла делает печать. Я не знаю, что это значит.



решаемые UPDATE:

Как связано с Джоном Конде, массив чересстрочной структуры отличается при загрузке нескольких файлов, чем при загрузке одного файла. Чтобы использовать 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 ($files as $file) { 
    echo $file['name']; 
} 
+0

Код в разделе «Решенное обновление» довольно плохое. is_array ($ fdata ['name']) всегда будет оценивать значение false, что означает, что большая часть примера никогда не запускается. См. Принятый ответ на этой странице. –

ответ

14

Попробуйте

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

UPDATE:

Google нашел this tutorial, которые могут помочь вам

+5

Или 'print_r ($ _ FILES);' если структура неясна. –

+0

Кажется не работает, ничего не слышно. – kylex

+0

UPDATE: блестящий! это был вопрос. Структура массива принципиально отличается, что препятствует тому, чтобы foreach правильно перебирал файлы. Какой ужасный способ сделать это, я удивлен, что в PHP нет встроенной функции, чтобы позаботиться об этом ... – kylex

1

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

<input type="file" name="imageURL[]" id="imageURL" multiple /> 
+0

Хорошая мысль, но не проблема. Фактически секция hacks Firefox показывает несколько как multiple = "" – kylex

3

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

$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; 
Смежные вопросы