Upload von Dateien via PHP

Fehlerbehandlung

Deshalb muss das Skript sie in den gewünschten Ordner verschieben. Das erledigt Version 2 unseres Skriptes, die zugleich auch eine einfache Fehlerbehandlung enthält.

In Zeile 13 des Skriptes wird das error_reporting eingeschaltet, was das Debugging erleichtert. Dann definieren wir die Variable $maxsize (Zeile 16), über die wir später die Größe der hochladbaren Dateien begrenzen können. Die Variable $upload_dir (Zeile 19) zeigt auf das Unterverzeichnis uploads des Ordners, in dem das Upload-Skript liegt.

Diesen Ordner müssen Sie auf dem Server anlegen und dem Webserver den Schreibzugriff erlauben. Das Skript funktioniert nur mit relativen Pfadangaben.

Als Nächstes überprüfen wir, ob das Formular schon abgeschickt oder die Webseite abgerufen wurde (Zeile 22). Im ersten Fall wird der Fehlercode in der Variable $uploaded_file['error'] abgelegt und anschließend verarbeitet:

Ist kein Fehler aufgetreten, speichert das Skript die temporäre Datei im Verzeichnis $upload_dir ab. Dazu nutzen wir die PHP-Funktion move_uploaded_file, die für solche Transfers sicherheitstechnisch optimiert wurde:

29: $dateiname =
$uploaded_fi le
['name'];
30: // Kein Fehler: verschieben
31: move_uploaded_fi le($uploaded_
fi le['tmp_name'],$upload_dir .
$dateiname);
32: echo "<p><a href='" . $upload_dir
. $dateiname . "'>Datei ansehen</a></p>";

In Zeile 32 erzeugt das Skript einen Link, über den der Benutzer die Datei ansehen und wieder herunterladen kann.

Dateigrößenbeschränkungen

Der Umgang mit Dateien unter Beachtung von Größenbeschränkungen ist eine der wesentlichen Aufgaben des Upload-Skriptes. Leider bietet PHP keine Möglichkeit, die Dateigröße vor dem vollständigen Upload zu checken. Das führt dazu, dass Nutzer eine Datei mit gewissem Zeitaufwand hochladen, um anschließend festzustellen, dass der Server sie wegen ihrer Größe abweist.

Um die Zahl solcher Usability-Unfälle zu minimieren, zeigen wir die maximale Dateigröße in Version 3 unseres Skriptes im Upload-Formular an. Dazu vergleichen wir in den Zeilen 31 bis 36 die verschiedenen Größenbeschränkungen, die für Uploads greifen. Seitens der PHP-Konfiguration (php.ini) sind das upload_max_ filesize und post_max_size.

Workshop Datentransfer

© Archiv

Ein einfaches Input-Feld sowie ein Submit-Button reichen für den Datei-Upload aus.

Außerdem haben wir selbst die Variable $maxsize eingeführt. Das Skript ermittelt den kleinsten der drei Werte und speichert diesen in der Variable $maxsize ab. Das bedeutet: Selbst wenn in Zeile 16 $maxsize fälschlich größer definiert wird als es die von der php.ini vorgegebenen Parameter erlauben, passt das Skript die Variable automatisch nach unten an.

Außerdem müssen Sie das Skript nicht angleichen, wenn Sie es auf unterschiedlich konfigurierten Servern einsetzen. Vielmehr erscheint die korrekte maximale Dateigröße automatisch im Upload-Formular.

Am Rande: Die Funktion BinarySuffixKiller wandelt Größenangaben der php.ini ("G" für Gigabyte, "M" für Megabyte und "K" für Kilobyte) korrekt um und lässt sich auch in anderen Projekten wiederverwenden.

Erweitererte Fehlerbehandlung

Die rudimentäre Fehlerbehandlung aus Version 2 haben wir in Version 3 erweitert:

43: if ($uploaded_fi le['error'] == 1){
44: echo "<h1>Fehler: Datei zu
gross</h1>";
45: }elseif($uploaded_file['error']
== 3){
46: echo "<h1>Fehler: Datei unvollstaendig</
h1>";
47: }elseif($uploaded_file['error']
== 4){
48: echo "<h1>Fehler: Datei wurde
nicht übermittelt</h1>";
49: }elseif($uploaded_file['size'] >
$maxsize){
50: echo "<h1>Fehler: Datei zu gross</h1>";

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​".