Многострочный массив файлов PHP

У меня есть следующий код, который работает и загружается, но он не будет циклически перемещаться по массиву для загрузки каждого файла, только первого файла.

<form method="post" enctype="multipart/form-data" action="http://<?php echo $pageURL;?>"> <input class="new" multiple="multiple" name="documents[]" type="file" /> <input class="new" multiple="multiple" name="documents[]" type="file" /> <input type="submit" class="button" name="addMaterials" value="Add" /> <?php foreach($_FILES['documents']['tmp_name'] as $key => $tmp_name) { $file_name = $key.$_FILES['documents']['name'][$key]; $file_size =$_FILES['documents']['size'][$key]; $file_tmp =$_FILES['documents']['tmp_name'][$key]; $file_type=$_FILES['documents']['type'][$key]; move_uploaded_file($file_tmp,"files/".time().$file_name); } ?> 

Мне нужно, чтобы он перебирал массив файлов моих документов [].

Пример print_r() массива документов:

 Array ( [name] => Array ( [0] => AcroRd32.exe ) [type] => Array ( [0] => application/x-msdownload ) [tmp_name] => Array ( [0] => C:\xampp\tmp\phpE8BD.tmp ) [error] => Array ( [0] => 0 ) [size] => Array ( [0] => 1343112 ) ) 

Любая помощь оценивается.

Solutions Collecting From Web of "Многострочный массив файлов PHP"

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

  <?php if(isset($_FILES['documents'])){ foreach($_FILES['documents']['tmp_name'] as $key => $tmp_name) { $file_name = $key.$_FILES['documents']['name'][$key]; $file_size =$_FILES['documents']['size'][$key]; $file_tmp =$_FILES['documents']['tmp_name'][$key]; $file_type=$_FILES['documents']['type'][$key]; move_uploaded_file($file_tmp,"galleries/".time().$file_name); } }else{ echo "<form enctype='multipart/form-data' action='test1.php' method='POST'>"; echo "File:<input name='documents[]' multiple='multiple' type='file'/><input type='submit' value='Upload'/>"; echo "</form>"; } ?> 

Для тех, кто пытается это сделать с помощью одной файловой php-функции (я использую классы, но вы можете перейти к функции):

HTML:

  <input type="file" name="foto[]" /> <input type="file" name="foto[]" /> <input type="file" name="foto[]" /> <input type="file" name="foto[]" /> <input type="file" name="foto[]" /> 

PHP:

 if (isset($_FILES['foto'])) { $arquivo = array(); foreach ($_FILES['foto']["name"] as $file=>$key) { // the empty input files create an array index too, so we need to // check if the name exits. It means the file exists. if (!empty($_FILES['foto']["name"][$file])) { $arquivo ["name"] = $_FILES['foto']["name"][$file]; $arquivo ["type"] = $_FILES['foto']["type"][$file]; $arquivo ["tmp_name"] = $_FILES['foto']["tmp_name"][$file]; $arquivo ["error"] = $_FILES['foto']["error"][$file]; $arquivo ["size"] = $_FILES['foto']["size"][$file]; $foto = new foto(); // create an obj foto // $arquivo means file, it`s our file format as a single $_file['file'] if ($foto -> upload($arquivo)) { // if its uploaded than save $foto -> save(); } } } } 

по моему классу фото:

 public function upload($foto) { $upload_dir = "D:/xampp/htdocs/prova/fotos/"; $file_dir = $upload_dir . $foto["name"]; $move = move_uploaded_file($foto["tmp_name"], $file_dir); $this -> arquivo = $foto["name"]; // use this to save to db later // this serves to return true if the file is uploaded $retorno = ($move) ? 1 : 0; return $retorno; } 

Попробуйте использовать этот код для многоточечной загрузки

 <form method="post" action="upload-page.php" enctype="multipart/form-data"> <input name="filesToUpload[]" id="filesToUpload" type="file" multiple="" /> </form> 

В PHP

 if(count($_FILES['uploads']['filesToUpload'])) { foreach ($_FILES['uploads']['filesToUpload'] as $file) { //do your upload stuff here echo $file; } } 

Чтобы показать имя файла, используя javascript

 //get the input and UL list var input = document.getElementById('filesToUpload'); var list = document.getElementById('fileList'); //empty list for now... while (list.hasChildNodes()) { list.removeChild(ul.firstChild); } //for every file... for (var x = 0; x < input.files.length; x++) { //add to list var li = document.createElement('li'); li.innerHTML = 'File ' + (x + 1) + ': ' + input.files[x].name; list.append(li); } 

Попробуйте этот цикл цикла вашего documents array()

 <?php foreach($_FILES['documents']['tmp_name'] as $key => $tmpName) { $file_name = $_FILES['documents']['name'][$key]; $file_type = $_FILES['documents']['type'][$key]; $file_size = $_FILES['documents']['size'][$key]; $file_tmp = $_FILES['documents']['tmp_name'][$key]; move_uploaded_file($file_tmp,"files/".time().$file_name); } ?>