Envio de vários ficheiros em php

Author: udaya, 2010-04-24

13 answers

Sei que este é um post antigo, mas mais alguma explicação pode ser útil para alguém tentar enviar vários ficheiros... Aqui está o que você precisa fazer:
  • o nome de entrada deve ser definido como um array. name="inputName[]"
  • o elemento de entrada deve ter multiple="multiple" ou apenas multiple
  • no seu ficheiro PHP use a sintaxe "$_FILES['inputName']['param'][index]"
  • Certifique - se de procurar os nomes e localizações dos ficheiros vazios, a lista pode conter cadeias de caracteres vazias . Antes de utilizar array_filter() contar.

Aqui está um exemplo baixo e sujo (mostrando apenas o código relevante)

HTML:

<input name="upload[]" type="file" multiple="multiple" />

PHP:

//$files = array_filter($_FILES['upload']['name']); //something like that to be used before processing files.

// Count # of uploaded files in array
$total = count($_FILES['upload']['name']);

// Loop through each file
for( $i=0 ; $i < $total ; $i++ ) {

  //Get the temp file path
  $tmpFilePath = $_FILES['upload']['tmp_name'][$i];

  //Make sure we have a file path
  if ($tmpFilePath != ""){
    //Setup our new file path
    $newFilePath = "./uploadFiles/" . $_FILES['upload']['name'][$i];

    //Upload the file into the temp dir
    if(move_uploaded_file($tmpFilePath, $newFilePath)) {

      //Handle other code here

    }
  }
}
Espero que isto ajude!
 197
Author: Andy Braham, 2018-05-08 08:02:57

Vários ficheiros podem ser seleccionados e depois enviados com o
<input type='file' name='file[]' multiple>
O programa de php de amostra que faz o envio:

<html>
<title>Upload</title>
<?php
    session_start();
    $target=$_POST['directory'];
        if($target[strlen($target)-1]!='/')
                $target=$target.'/';
            $count=0;
            foreach ($_FILES['file']['name'] as $filename) 
            {
                $temp=$target;
                $tmp=$_FILES['file']['tmp_name'][$count];
                $count=$count + 1;
                $temp=$temp.basename($filename);
                move_uploaded_file($tmp,$temp);
                $temp='';
                $tmp='';
            }
    header("location:../../views/upload.php");
?>
</html>

Os ficheiros seleccionados são recebidos como uma lista com

$_FILES['file']['name'][0] guardar o nome do primeiro ficheiro.
$_FILES['file']['name'][1] guardar o nome do segundo ficheiro.
e assim por diante.

 31
Author: rjv, 2011-12-18 08:37:39

HTML

  1. Criar div com id='dvFile';

  2. Criar um button;

  3. onclick da função de chamada do botãoadd_more()

JavaScript

function  add_more() {
  var txt = "<br><input type=\"file\" name=\"item_file[]\">";
  document.getElementById("dvFile").innerHTML += txt;
}

PHP

if(count($_FILES["item_file"]['name'])>0)
 { 
//check if any file uploaded
 $GLOBALS['msg'] = ""; //initiate the global message
  for($j=0; $j < count($_FILES["item_file"]['name']); $j++)
 { //loop the uploaded file array
   $filen = $_FILES["item_file"]['name']["$j"]; //file name
   $path = 'uploads/'.$filen; //generate the destination path
   if(move_uploaded_file($_FILES["item_file"]['tmp_name']["$j"],$path)) 
{
   //upload the file
    $GLOBALS['msg'] .= "File# ".($j+1)." ($filen) uploaded successfully<br>";
    //Success message
   }
  }
 }
 else {
  $GLOBALS['msg'] = "No files found to upload"; //No file upload message 
}

Desta forma, você pode adicionar arquivos/imagens, quantas forem necessárias, e lidar com eles através de script php.

 6
Author: kdniazi, 2012-10-02 05:48:58
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<?php
$max_no_img=4; // Maximum number of images value to be set here

echo "<form method=post action='' enctype='multipart/form-data'>";
echo "<table border='0' width='400' cellspacing='0' cellpadding='0' align=center>";
for($i=1; $i<=$max_no_img; $i++){
echo "<tr><td>Images $i</td><td>
<input type=file name='images[]' class='bginput'></td></tr>";
}

echo "<tr><td colspan=2 align=center><input type=submit value='Add Image'></td></tr>";
echo "</form> </table>";
while(list($key,$value) = each($_FILES['images']['name']))
{
    //echo $key;
    //echo "<br>";
    //echo $value;
    //echo "<br>";
if(!empty($value)){   // this will check if any blank field is entered
$filename =rand(1,100000).$value;    // filename stores the value

$filename=str_replace(" ","_",$filename);// Add _ inplace of blank space in file name, you can remove this line

$add = "upload/$filename";   // upload directory path is set
//echo $_FILES['images']['type'][$key];     // uncomment this line if you want to display the file type
//echo "<br>";                             // Display a line break
copy($_FILES['images']['tmp_name'][$key], $add); 
echo $add;
    //  upload the file to the server
chmod("$add",0777);                 // set permission to the file.
}
}
?>
</body>
</html>
 4
Author: muaz khalid, 2011-05-16 03:57:25

Simples é que, basta contar o array de arquivos primeiro, em seguida, em loop você pode facilmente fazer isso como

$count = count($_FILES{'item_file']['name']);
Agora tens o número total de ficheiros certo.

In while loop do like this:

$i = 0;
while($i<$count)
{
    Upload one by one like we do normally
    $i++;
}
 4
Author: Nick, 2012-10-27 02:26:44

Não é assim tão diferente de carregar um ficheiro - {[[0]} é um array que contém todos os ficheiros enviados.

Há um capítulo no manual do PHP: a enviar vários ficheiros

Se quiser activar vários uploads de ficheiros com uma selecção fácil no fim do utilizador (seleccionando vários ficheiros de uma vez em vez de preencher campos de envio) dê uma vista de olhos em SWFUpload. Ele funciona de forma diferente de um formulário de envio de arquivo normal e requer Flash para funcionar, embora.O SWFUpload foi obsoleto juntamente com o Flash. Verifique as outras respostas mais recentes para a abordagem agora correta.

 4
Author: Pekka 웃, 2017-10-05 13:09:04

Aqui está uma função que escrevi que devolve um array $_FILES mais compreensível.

function getMultiple_FILES() {
    $_FILE = array();
    foreach($_FILES as $name => $file) {
        foreach($file as $property => $keys) {
            foreach($keys as $key => $value) {
                $_FILE[$name][$key][$property] = $value;
            }
        }
    }
    return $_FILE;
}
 3
Author: Cheejyg, 2014-05-23 05:46:00
Este guião simples funcionou comigo.
<?php

foreach($_FILES as $file){
  //echo $file['name']; 
  echo $file['tmp_name'].'</br>'; 
  move_uploaded_file($file['tmp_name'], "./uploads/".$file["name"]);
}

?>
 2
Author: Rohit Mandiwal, 2017-08-14 15:36:29

Corro para cada loop com o elemento de erro, pareço com

 foreach($_FILES['userfile']['error'] as $k=>$v)
 {
    $uploadfile = 'uploads/'. basename($_FILES['userfile']['name'][$k]);
    if (move_uploaded_file($_FILES['userfile']['tmp_name'][$k], $uploadfile)) 
    {
        echo "File : ", $_FILES['userfile']['name'][$k] ," is valid, and was                      successfully uploaded.\n";
    }

    else 
    {
        echo "Possible file : ", $_FILES['userfile']['name'][$k], " upload attack!\n";
    }   

 }
 1
Author: HCV, 2014-05-17 11:26:18

Acabei de encontrar a seguinte solução:

Http://www.mydailyhacks.org/2014/11/05/php-multifile-uploader-for-php-5-4-5-5/

É um programa de Upload multi ficheiro PHP pronto com um formulário onde pode adicionar várias entradas e uma barra de progresso AJAX. Deve funcionar logo depois de desempacotar no servidor...

 1
Author: Peter, 2014-11-13 22:57:30

É fácil enviar vários ficheiros usando o php usando o script abaixo.

Obter o código-fonte completo e antevisão

<?php
if (isset($_POST['submit'])) {
    $j = 0; //Variable for indexing uploaded image 

 $target_path = "uploads/"; //Declaring Path for uploaded images
    for ($i = 0; $i < count($_FILES['file']['name']); $i++) {//loop to get individual element from the array

        $validextensions = array("jpeg", "jpg", "png");  //Extensions which are allowed
        $ext = explode('.', basename($_FILES['file']['name'][$i]));//explode file name from dot(.) 
        $file_extension = end($ext); //store extensions in the variable

  $target_path = $target_path . md5(uniqid()) . "." . $ext[count($ext) - 1];//set the target path with a new name of image
        $j = $j + 1;//increment the number of uploaded images according to the files in array       

   if (($_FILES["file"]["size"][$i] < 100000) //Approx. 100kb files can be uploaded.
                && in_array($file_extension, $validextensions)) {
            if (move_uploaded_file($_FILES['file']['tmp_name'][$i], $target_path)) {//if file moved to uploads folder
                echo $j. ').<span id="noerror">Image uploaded successfully!.</span><br/><br/>';
            } else {//if file was not moved.
                echo $j. ').<span id="error">please try again!.</span><br/><br/>';
            }
        } else {//if file size and file type was incorrect.
            echo $j. ').<span id="error">***Invalid file Size or Type***</span><br/><br/>';
        }
    }
}
?>
 0
Author: Merbin Joe, 2016-05-13 04:27:20
$property_images = $_FILES['property_images']['name'];
    if(!empty($property_images))
    {
        for($up=0;$up<count($property_images);$up++)
        {
            move_uploaded_file($_FILES['property_images']['tmp_name'][$up],'../images/property_images/'.$_FILES['property_images']['name'][$up]);
        }
    }
 0
Author: Vishnu Bhadoriya, 2016-06-15 06:40:52

Bela ligação em:

Upload de um ficheiro único do PHP com uma explicação básica variável.

Envio de ficheiros PHP com a validação

PHP enviar vários ficheiros com validação Carregue aqui para obter o código-fonte

PHP / jQuery enviar vários ficheiros com a barra de progresso e validação (Carregue aqui para obter o código-fonte)

Como enviar ficheiros em PHP e armazenar na Base de dados MySql (Carregue aqui para obter o código-fonte)

extract($_POST);
    $error=array();
    $extension=array("jpeg","jpg","png","gif");
    foreach($_FILES["files"]["tmp_name"] as $key=>$tmp_name)
            {
                $file_name=$_FILES["files"]["name"][$key];
                $file_tmp=$_FILES["files"]["tmp_name"][$key];
                $ext=pathinfo($file_name,PATHINFO_EXTENSION);
                if(in_array($ext,$extension))
                {
                    if(!file_exists("photo_gallery/".$txtGalleryName."/".$file_name))
                    {
                        move_uploaded_file($file_tmp=$_FILES["files"]["tmp_name"][$key],"photo_gallery/".$txtGalleryName."/".$file_name);
                    }
                    else
                    {
                        $filename=basename($file_name,$ext);
                        $newFileName=$filename.time().".".$ext;
                        move_uploaded_file($file_tmp=$_FILES["files"]["tmp_name"][$key],"photo_gallery/".$txtGalleryName."/".$newFileName);
                    }
                }
                else
                {
                    array_push($error,"$file_name, ");
                }
            }

E você deve verificar o seu código HTML

<form action="create_photo_gallery.php" method="post" enctype="multipart/form-data">
    <table width="100%">
        <tr>
            <td>Select Photo (one or multiple):</td>
            <td><input type="file" name="files[]" multiple/></td>
        </tr>
        <tr>
            <td colspan="2" align="center">Note: Supported image format: .jpeg, .jpg, .png, .gif</td>
        </tr>
        <tr>
            <td colspan="2" align="center"><input type="submit" value="Create Gallery" id="selectedButton"/></td>
        </tr>
    </table>
</form>

Bela ligação em:

Upload de um ficheiro único do PHP com uma explicação básica variável.

Envio de ficheiros PHP com a validação

PHP enviar vários ficheiros com validação Carregue aqui para obter o código-fonte

PHP / jQuery enviar vários ficheiros com a barra de progresso e validação (Carregue aqui para obter o código código)

Como enviar ficheiros em PHP e armazenar na Base de dados MySql (Carregue aqui para obter o código-fonte)

 0
Author: Kalpesh Rajai, 2017-07-30 12:05:59