web-dev-qa-db-de.com

Mehrere Dateien in PHP hochladen

Ich möchte mehrere Dateien hochladen und in einem Ordner ablegen, den Pfad abrufen und in der Datenbank speichern ... Ein gutes Beispiel, nach dem Sie mehrere Dateien hochgeladen haben ... 

Hinweis: Dateien können von jedem Typ sein ...

96
udaya

Ich weiß, dass dies ein alter Beitrag ist, aber einige weitere Erklärungen könnten nützlich sein für jemanden, der versucht, mehrere Dateien hochzuladen ... Folgendes müssen Sie tun:

  • Der Name der Eingabe muss als Array definiert sein, d.h. .name="inputName[]"
  • Eingabeelement muss multiple="multiple" oder nur multiple haben
  • Verwenden Sie in Ihrer PHP -Datei die Syntax "$_FILES['inputName']['param'][index]"
  • Stellen Sie sicher, dass Sie nachleeren Dateinamen und Pfadensuchen. Das Array enthält möglicherweise leere Zeichenfolgen . Verwenden Sie array_filter() vor dem Zählen.

Hier ist ein Down und Dirty-Beispiel (zeigt nur relevanten Code)

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

    }
  }
}

Hoffe das hilft aus!

207
Andy Braham

Es können mehrere Dateien ausgewählt und dann mit dem hochgeladen werden
<input type='file' name='file[]' multiple>
Das PHP-Beispielskript, das den Upload ausführt:

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

Die ausgewählten Dateien werden mit als Array empfangen

$_FILES['file']['name'][0] speichert den Namen der ersten Datei.
$_FILES['file']['name'][1], der den Namen der zweiten Datei speichert.
und so weiter.

33
rjv

HTML

  1. div mit id='dvFile' erstellen;

  2. erstellen Sie eine button;

  3. onclick dieser aufrufenden Funktion add_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 
}

Auf diese Weise können Sie beliebig viele Dateien/Bilder hinzufügen und diese über ein PHP-Skript bearbeiten.

6
kdniazi

Es unterscheidet sich nicht so sehr vom Hochladen einer Datei - $_FILES ist ein Array, das alle hochgeladenen Dateien enthält.

Es gibt ein Kapitel im Handbuch PHP: Mehrere Dateien hochladen

Wenn Sie mehrere Dateiuploads mit einfacher Auswahl am Ende des Benutzers aktivieren möchten (mehrere Dateien auf einmal auswählen, anstatt die Upload-Felder auszufüllen), schauen Sie unter SWFUpload nach. Es funktioniert anders als bei einem normalen Formular zum Hochladen von Dateien und erfordert jedoch die Verwendung von Flash. SWFUpload wurde zusammen mit Flash nicht mehr benötigt. Überprüfen Sie die anderen, neueren Antworten auf den nun korrekten Ansatz.

4
Pekka 웃
<!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
muaz khalid

Ganz einfach: Zählen Sie zuerst das Datei-Array, dann können Sie dies während der Schleife in einfacher Weise tun 

$count = count($_FILES{'item_file']['name']);

jetzt haben Sie die Gesamtzahl der Dateien richtig.

In while-Schleife mache das so:

$i = 0;
while($i<$count)
{
    Upload one by one like we do normally
    $i++;
}
4
Nick

Hier ist eine Funktion, die ich geschrieben habe, die ein verständlicheres $_FILES-Array zurückgibt.

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
Cheejyg

dieses einfache Skript hat für mich funktioniert.

<?php

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

?>
2
Rohit Mandiwal

Ich führe eine foreach-Schleife mit einem Fehlerelement aus

 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
HCV

Ich habe gerade folgende Lösung gefunden:

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

es ist ein fertiges PHP Multi File Upload Script mit einem Formular, in dem Sie mehrere Eingaben und eine Fortschrittsleiste AJAX hinzufügen können. Es sollte direkt nach dem Auspacken auf dem Server funktionieren ...

1
Peter

Wir können problemlos mehrere Dateien mit PHP hochladen, indem Sie das folgende Skript verwenden.

Download des vollständigen Quellcodes und der Vorschau

<?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
Merbin Joe
$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