PHP: Dateiupload mit mehreren Dateien


Diese Anleitung zeigt, wie man schnell und einfach den Dateiupload mit PHP und mehreren Dateien realisieren kann.

HTML Form

Die HTML Form legen wir mit einem „file“ Field an, welches das Attribut „mutliple“ erhält. Außerdem müssen wir den Ecryption Type der Form festelgen:

<form action="index.php?do=send" method="post" enctype="multipart/form-data">
   <input type="file" name="upload[]" multiple>
   <input type="submit">
</form>

Das war’s auch schon mit der Form. Der Rest wird über PHP gesteuert.

PHP Dateiverarbeitung

Dadurch, dass wir mehrere Dateien jetzt verarbeiten wollen, müssen wir mit einer FOR Schleife unseren „upload[]“ Array durchlaufen. Das ganz könnte so aussehen:

for( $i=0 ; $i < $total ; $i++ ) 
{
   $tmpFilePath = $_FILES['upload']['tmp_name'][$i];
   $filename = pathinfo($_FILES['upload']['name'][$i], PATHINFO_FILENAME);

   $extension = strtolower(pathinfo($_FILES['upload']['name'][$i], PATHINFO_EXTENSION));
   $new_path = "./uploadFiles/" .$filename.'.'.$extension;

   move_uploaded_file($_FILES['upload']['tmp_name'][$i], $new_path);
   //Ausgabe:
   echo "<br>".$new_path;                     
}

Damit ist der Dateiupload auch bereits fertig. Jetzt kann man noch diverse Sicherheitsfunktionen mit einbauen. Wir wollen jetzt noch sicher gehen, dass nur gewisse Dateiendungen hochgeladen werden, die Dateigröße nicht höher als 2MB ist und falls die Datei mit dem Namen bereits vorhanden ist, soll ein Zähler hinten dran geschrieben werden:

for( $i=0 ; $i < $total ; $i++ ) 
{
   $tmpFilePath = $_FILES['upload']['tmp_name'][$i];
   $filename = pathinfo($_FILES['upload']['name'][$i], PATHINFO_FILENAME);
   $extension = strtolower(pathinfo($_FILES['upload']['name'][$i], PATHINFO_EXTENSION));
                    
   $allowed_extensions = array('pdf', 'doc', 'txt', 'jpg', 'jpeg', 'png');
   if(!in_array($extension, $allowed_extensions)) 
   {
      die("Ungültige Dateiendung. Nur pdf, doc, txt, png, jpg, jpeg und Dateien sind erlaubt");
   }

   $max_size = 2048*1024; //500 KB
   if($_FILES['upload']['size'][$i] > $max_size) 
   {
      die("Bitte keine Dateien größer 2MB hochladen");
   }

   $new_path = "./uploadFiles/" .$filename.'.'.$extension;
   if(file_exists($new_path)) 
   { //Falls Datei existiert, hänge eine Zahl an den Dateinamen
      $id = 1;
      do {
         $new_path = "./uploadFiles/" .$filename.'_'.$id.'.'.$extension;
         $id++;
      } while(file_exists($new_path));
   }

   move_uploaded_file($_FILES['upload']['tmp_name'][$i], $new_path);               
}

Quellen

Array Idee: phpuser@gmail.com via php.net
Sicherheitsfeatures: Dateiupload via php-einfach.de


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.