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