PHP-Einfach.de
  • PHP Tutorial
  • MySQL Tutorial
  • Für Fortgeschrittene
  • Webhosting
  • Forum

Dateiupload

16. August 2022
  1. Home
  2. »
  3. PHP Tutorial
  4. »
  5. Dateiupload

Im folgenden Script wird euch erklärt, wie ihr einen einfachen Dateiupload ermöglicht. Euer Besucher kann dazu von seiner lokalen Festplatte eine Datei auswählen und diese dann auf euren Webspace hochladen. So können Besucher beispielsweise Bilder auf eurer Website hochladen.

Der Upload von Dateien ist nicht ganz ungefährlich. Für weitere Informationen zu den Sicherheitsrisiken schaut euch den Artikel Sicherer Dateiupload an.

Inhaltsverzeichnis

  • 1 Formular für den Dateiupload
  • 2 Upload-Script
  • 3 Das $_FILES-Array
  • 4 Sicherer Bildupload

Formular für den Dateiupload

Euer Formular für den Dateiupload kann wie folgt aussehen:

1
2
3
4
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="datei"><br>
<input type="submit" value="Hochladen">
</form>

Wichtig ist, dass ihr im Form-Element den enctype setzt. Für das Hochladen einer Datei wählt ihr als type entsprechen file aus. Euer Formular kann auch mehrere file-Inputfelder beinhalten, falls ihr mehrere Dateien gleichzeitig hochladen möchtet. Achten dann dabei aber darauf, dass jedes Feld einen anderen name hat.

Upload-Script

Hochgeladene Dateien befinden sich in der Variable $_FILES. Ähnlich wie $_POST und $_GET könnt ihr so die verschiedenen hochgeladenen Dateien abrufen.

Euer Webserver speichert die hochgeladene Datei unter einem temporären Namen ab. Um nun diese Datei in euren Webspace zu bekommen, müsst ihr diese entsprechend verschieben. Dies geht mittels der Funktion move_uploaded_file(); .

Eure upload.php könnte im einfachsten Fall wie folgt aussehen:

1
move_uploaded_file($_FILES['datei']['tmp_name'], 'upload/'.$_FILES['datei']['name']);

Dies würde die temporäre Datei in das Unterverzeichnis upload verschieben mit dem Originalname der Datei. Achtung, existente Daten werden dabei überschrieben. Ebenfalls müsst ihr, falls ihr dieses auf eurem Webhoster ausführt, darauf achten dass PHP in das Verzeichnis schreiben kann. Ggf. muss das Verzeichnis dafür die Schreibrechte CHMOD 777 besitzen.

Aus Sicherheitsgründen solltet ihr die obige Variante aber nie nutzen, da ein Angreifer so Schadcode hochladen könnte (mehr Infos zum Hintergrund im Artikel Sicherer Dateiupload).

Das $_FILES-Array

Datei-Uploads speichert PHP im $_FILES-Array ab. Je nach Name die ihr dem Input-Feld gegeben habt könnt ihr auf unterschiedliche Informationen im Array $_FILES['name_des_input_felds'] zugreifen:

Variable Inhalt
$_FILES['datei']['name'] Der Name der Datei auf dem Rechner des Besuchers
$_FILES['datei']['tmp_name'] Temporärer Pfad auf dem Server zur hochgeladenen Datei
$_FILES['datei']['size'] Die Größe der Datei in Bytes.
$_FILES['datei']['type'] Der MIME-Type der Datei (Achtung: Kann von Angreifer beliebig manipuliert werden).

Sicherer Bildupload

Ein sicherer Upload für Bilder kann wie folgt aussehen. Dabei wird überprüft, dass wirklich eine Bilddatei hochgeladen wird. Ebenfalls wird die Größe der Datei überprüft um zu große Dateien auszuschließen. Falls bereits ein Bild mit dem Namen vorhanden ist, wird der Name der Datei um eine entsprechende Zahl erweitert.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
$upload_folder = 'upload/'; //Das Upload-Verzeichnis
$filename = pathinfo($_FILES['datei']['name'], PATHINFO_FILENAME);
$extension = strtolower(pathinfo($_FILES['datei']['name'], PATHINFO_EXTENSION));
 
 
//Überprüfung der Dateiendung
$allowed_extensions = array('png', 'jpg', 'jpeg', 'gif');
if(!in_array($extension, $allowed_extensions)) {
   die("Ungültige Dateiendung. Nur png, jpg, jpeg und gif-Dateien sind erlaubt");
}
 
//Überprüfung der Dateigröße
$max_size = 500*1024; //500 KB
if($_FILES['datei']['size'] > $max_size) {
   die("Bitte keine Dateien größer 500kb hochladen");
}
 
//Überprüfung dass das Bild keine Fehler enthält
if(function_exists('exif_imagetype')) { //Die exif_imagetype-Funktion erfordert die exif-Erweiterung auf dem Server
   $allowed_types = array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF);
   $detected_type = exif_imagetype($_FILES['datei']['tmp_name']);
   if(!in_array($detected_type, $allowed_types)) {
      die("Nur der Upload von Bilddateien ist gestattet");
   }
}
 
//Pfad zum Upload
$new_path = $upload_folder.$filename.'.'.$extension;
 
//Neuer Dateiname falls die Datei bereits existiert
if(file_exists($new_path)) { //Falls Datei existiert, hänge eine Zahl an den Dateinamen
   $id = 1;
   do {
      $new_path = $upload_folder.$filename.'_'.$id.'.'.$extension;
      $id++;
   } while(file_exists($new_path));
}
 
//Alles okay, verschiebe Datei an neuen Pfad
move_uploaded_file($_FILES['datei']['tmp_name'], $new_path);
echo 'Bild erfolgreich hochgeladen: <a href="'.$new_path.'">'.$new_path.'</a>';
?>

 

Autor: Nils Reimers
Zurück: Andere PHP Dateien einbinden
Weiter: Cookies

PHP Tutorial

  • Installation
  • Webspace
  • Erste Schritte
  • Text ausgeben per echo
  • Kommentare
  • Variablen
  • Rechnen mit Variablen
  • $_GET und $_POST
  • if-Anweisungen
  • Vergleichsoperatoren
  • Logische Operatoren
  • Übungsaufgaben
  • while-Schleife
  • for-Schleife
  • Arrays
  • Dateien lesen
  • Dateien schreiben
  • Datum und Uhrzeit
  • E-Mails mit PHP versenden
  • Suchen und Ersetzen
  • Sessions
  • Eigene Funktionen
  • Andere PHP Dateien einbinden
  • Dateiupload
  • Cookies
  • Konstanten
  • Reguläre Ausdrücke
  • Überblick: Wichtige PHP Funktionen
Mit freundlicher Unterstützung von:
  • Punkt191 Werbeagentur

Hoster – Geringste Ausfallzeit

  1. netcup Ø 0 Min.
  2. webgo Ø 0 Min.
  3. Linevast Ø 3 Min.
  4. All-Inkl.com Ø 3 Min.
  5. checkdomain Ø 4 Min.
  6. dogado Ø 6 Min.
  7. Strato Ø 8 Min.
  8. manitu Ø 10 Min.
  9. 1&1 Ø 10 Min.
  10. DomainFactory Ø 14 Min.
» Mehr erfahren

Impressum | Datenschutz | Auf PHP-Einfach.de werben

© PHP-Einfach.de 2003 - 2025

Cookie-Zustimmung verwalten
Um dir ein optimales Erlebnis zu bieten, verwenden wir Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wenn du diesen Technologien zustimmst, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn du deine Zustimmung nicht erteilst oder zurückziehst, können bestimmte Merkmale und Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Anbieter verwalten Lese mehr über diese Zwecke
Einstellungen ansehen
{title} {title} {title}