HTML Form erstellen

Die HTML Form legen wir mit einem „file“ Field an, welches das Attribut „mutliple“ erhält und als Name "upload[]" als Array bekommt. 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>

 

 

PHP Dateiverarbeitung

Dadurch, dass wir mehrere Dateien 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  via php.net
Sicherheitsfeatures von Dateiupload via php-einfach.de

Previous PostLinux Tutorial: MySQL Datenbank importieren und exportieren
Next PostPlesk/PHP Tutorial: XML API konfigurieren und einsetzen