Upload von Dateien via PHP

Datei-Handling

Letzteres kann passieren, wenn der Nutzer auf Hochladen klickt, ohne vorher eine Datei auszuwählen. Den Fehlercode 2 gäbe der Interpreter zurück, wenn die Dateigröße den Wert von MAX_FILE_SIZE überschreiten würde.

In den Zeilen 49 und 50 überprüfen wir schließlich ob die Dateigröße den in $maxsize gespeicherten Wert überschreitet. In allen diesen Fällen gibt das Skript eindeutige Fehlermeldungen aus.

Ausgewählte Dateitypen

Je nach Projekt soll das Skript unterschiedliche Dateitypen akzeptieren. In unserem Beispielprojekt handelt es sich dabei um Grafiken in den web-tauglichen Formaten jpeg, gif und png. Dateien, die es fehlerfrei und in akzeptabler Größe auf den Server geschafft haben, überprüfen wir in den Zeilen 56 bis 64 auf den gewünschten Dateityp und unterbinden in Zeile 66 und 67 den Upload anderer Dateitypen.

Der Dateityp lässt sich allerdings nicht nur durch den vom Browser übermittelten Mime-Type identifizieren, sondern theoretisch auch durch die Namenserweiterung und durch den Inhalt der Datei. Am zuverlässigsten funktioniert aber die hier verwendete Erkennung mittels Mime-Typ. Dieser ist in $uploaded_file['type'] hinterlegt.

Es spricht aber auch kaum etwas dagegen, den Dateityp anhand der Dateiendung zu erkennen. Systeme, die gif-Dateien unter anderen Endungen als .gif speichern, dürften rar gesät sein. Nur bei jpg und jpeg sowie bei Großund Kleinschreibung muss man aufpassen. Wer weitere Mime Media Typen abfragen will, orientiert sich dabei an dem unter tinyurl.com verfügbaren Verzeichnis.

Saubere Dateinamen

In Version 2 haben wir die Datei noch unter dem vom Browser übermittelten Namen abgespeichert. Schon um Angriffe durch problematische Zeichen zu verhindern, muss der Dateiname bereinigt werden.

In Version 3 greift sich unser Skript ab Zeile 69 den Inhalt des name-Elementes aus dem $_FILES-Array. Eventuell enthaltene Pfadangaben werden entfernt. Übrig bleiben nur der Name der Datei und das Suffix. Ersterer wird über eine Regular Expression von allen Zeichen befreit, bei denen es sich nicht um Kleinbuchstaben, Großbuchstaben oder Bindestriche handelt (Zeile 82). Das Suffix wird vom Script anhand des erkannten Mime-Typs neu gesetzt (Zeilen 85 bis 92).

Workshop Datentransfer

© Archiv

Die class_file_upload verfügt über Kommentare im Standard PHPDoc, den IDE wie Netbeans automatisch in Hilfetexte verwandeln.

Anderenfalls könnte ein Angreifer über das Skript eine Datei mit dem Mime-Typ image/jpeg, aber der Dateierweiterung .php schicken. Der Server würde sie mit der Endung .php speichern und beim Aufruf wegen ihrer Endung zur Ausführung an den PHP-Interpreter übergeben.

Fehler beim Speichern der Datei

Auch das Abspeichern der Datei ist in Version 3 vor typischen Fehlern geschützt. Das Upload-Verzeichnis könnte gänzlich fehlen oder es könnte dem Webserver an Schreibrechten dafür mangeln.

Wäre eine Datei gleichen Namens bereits vorhanden, würde das Skript sie überschreiben, was oft unerwünscht ist. Diesen Fällen nehmen sich die Zeilen 87 bis 92 unseres Skriptes an.

87: if(!is_dir($upload_dir)){
88: echo "<h1>Fehler: Upload-
Verzeichnis nicht da</h1>";
89: }elseif(!is_writable($upload_
dir)){
90: echo "<h1>Fehler: Upload-
Verzeichnis nicht beschreibbar</h1>";
91: }elseif(file_exists($upload_dir .
$dateiname)){
92: echo "<h1>Fehler: Datei mit
diesem Namen existiert schon</h1>";

class_file_upload

Mit Version 3 hat das Upload-Skript seinen vollen Funktionsumfang erreicht. Der Code ist aber mit jeder neuen Funktion unübersichtlicher geworden. In Version 4 wurden deshalb projektspezifische und wiederverwendbare Funktionen voneinander getrennt, wobei wir Letztere in eine eigene Klasse ausgelagert haben.

Mehr zum Thema

Youtube Sperre umgehen GEMA
Videos freischalten

So umgehen Sie die GEMA-Sperre bei Youtube. Was Sie dazu brauchen, und wie es am einfachsten geht.
Neue Fritzboxen unterstützen den AC-Standard.
WLAN-Geschwindigkeit verdoppeln

Mehr WLAN-Geschwindigkeit: Mit dem WLAN-Standard 802.11ac und den richtigen Geräten und Einstellungen verdoppeln Sie den Datendurchsatz.
Netflix auf dem TV
Programm in der Übersicht

Welche Filme und Serien gibt es bei Netflix eigentlich zu sehen? Was ist neu im Streaming-Angebot? Diese Antworten helfen weiter.
Netflix
Streaming

Preise, kompatible Geräte, Datenrate, Serien- und Filmangebot von Netflix: Wir beantworten die wichtigsten Fragen rund um den Streaming-Dienst.
E.T. – Der Außerirdische
Vorschau auf Film- und Serien-Highlights

Amazon Prime Instant Video lockt im Dezember 2016 mit Film-Highlights wie "E.T.", "Fast & Furious 7" und der Serie "Ku’damm 56​".