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