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

Dateiupload

10. Februar 2020
  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
  • Casinopilot24.com
  • Casino utan Spelpaus
  • Casino utan Spelpaus med Trustly
  • Neueonline-Casinos.com
  • CasinoHEX.at
  • Decasinos.de
  • Privatkredit247.com
  • CasinoAdvisers.com
  • parhaatuudetkasinot.com
  • BitcoinBuster.com
  • CryptoCasinos.com

Hoster – Geringste Ausfallzeit

  1. webgo Ø 1 Min.
  2. netcup Ø 6 Min.
  3. Linevast Ø 8 Min.
  4. manitu Ø 13 Min.
  5. Mittwald Ø 14 Min.
  6. dogado Ø 15 Min.
  7. All-Inkl.com Ø 18 Min.
  8. Hetzner Ø 20 Min.
  9. bplaced Ø 20 Min.
  10. Host Europe Ø 20 Min.
» Mehr erfahren

Impressum | Datenschutz | Auf PHP-Einfach.de werben

© PHP-Einfach.de 2003 - 2021

Um dich beim Lernen von PHP und MySQL zu unterstützen verwenden wir Cookies. OK Weitere Infos
Privacy & Cookies Policy

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Notwendige
immer aktiv

Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.

Nicht notwendige

Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.