У меня есть следующий код, который работает и загружается, но он не будет циклически перемещаться по массиву для загрузки каждого файла, только первого файла.
<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 ) )
Любая помощь оценивается.
вы можете использовать мой обновленный код, и, согласно моей демонстрации, он отлично подходит для загрузки нескольких файлов
<?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); } ?>