PHP 多文件数组

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/15941592/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 10:13:56  来源:igfitidea点击:

PHP Multiple File Array

phparraysfileupload

提问by Christopher JB Luck

I have the following code which works and uploads but it will not cycle through the array to upload every file, just the first file.

我有以下代码可以工作和上传,但它不会循环遍历数组来上传每个文件,只是第一个文件。

<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);
        }
?>

I need it to cycle through my documents[] file array.

我需要它来循环我的文档 [] 文件数组。

Example print_r()of the documents array:

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 ) 
    )

Any help appreciated.

任何帮助表示赞赏。

回答by liyakat

you can use my updated code and as per my demo it is working perfect for multiple file upload

您可以使用我更新的代码,根据我的演示,它非常适合多个文件上传

 <?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>";
}
?>

回答by sagits

For anyone trying to do it with a single file php function (i`m using classes, but you can change to a function):

对于尝试使用单个文件 php 函数执行此操作的任何人(我正在使用类,但您可以更改为函数):

html:

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:

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();
}


    }

    } 

}

on my foto class:

在我的照片课上:

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;

}

回答by sagits

Try with this code for multifile upload

尝试使用此代码进行多文件上传

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

In PHP

在 PHP 中

if(count($_FILES['uploads']['filesToUpload'])) {
foreach ($_FILES['uploads']['filesToUpload'] as $file) {

    //do your upload stuff here
    echo $file;

}
}

To show the file name using javascript

使用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);
}

回答by Ranjith

Try this way of loop your documents array()

试试这种循环方式 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);
}

?>

回答by NewCoder

File upload using multiple input fields.

使用多个输入字段上传文件。

HTML

HTML

<form action="" method="post" enctype="multipart/form-data">
          <p><input type="file" name="file_array[]"></p>
          <p><input type="file" name="file_array[]"></p>
          <p><input type="file" name="file_array[]"></p>
          <input type="submit" value="Upload all files">
        </form>

PHP

PHP

<?php
if(isset($_FILES['file_array'])){
    $name_array = $_FILES['file_array']['name'];
    $tmp_name_array = $_FILES['file_array']['tmp_name'];
    $type_array = $_FILES['file_array']['type'];
    $size_array = $_FILES['file_array']['size'];
    $error_array = $_FILES['file_array']['error'];
    for($i = 0; $i < count($tmp_name_array); $i++){
        if(move_uploaded_file($tmp_name_array[$i], "test_uploads/".$name_array[$i])){
            echo $name_array[$i]." upload is complete<br>";
        } else {
            echo "move_uploaded_file function failed for ".$name_array[$i]."<br>";
        }
    }
}
?>

回答by Rashid Iqbal

it's easy to upload multiple files, follow these steps.

上传多个文件很容易,请按照以下步骤操作。

  1. use array notation means square brackets with the name of the input like this
  2. <input type="file" id="indtbl_logo[]" name="indtbl_logo[]" multiple />
  3. you can loop throught this using $_FILESGlobal Variable
  1. 使用数组符号表示方括号与输入的名称是这样的
  2. <input type="file" id="indtbl_logo[]" name="indtbl_logo[]" multiple />
  3. 你可以使用$_FILES全局变量循环遍历这个
    foreach ($_FILES['indtbl_logo']['tmp_name'] as $key => $tmp_name) {
        $file_name = $key . $_FILES['indtbl_logo']['name'][$key];
        $file_size = $_FILES['indtbl_logo']['size'][$key];
        $file_tmp = $_FILES['indtbl_logo']['tmp_name'][$key];
        $file_type = $_FILES['indtbl_logo']['type'][$key]; 

        echo $file_name;
        echo "<br>"; 
    }