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

HTML5: Quick Reference Guide
Ratgeber: "HTML5"

Die wichtigsten Tags auf einen Blick: In unserem praktischen Arbeitsblatt finden Sie einen wertvollen Begleiter für die Umstellung Ihrer Webprojekte…
internet, webdesign, google, content, ranking, seo, suchmaschine
Ratgeber: Urheberrecht

Einzigartige Inhalte bieten Lesern Mehrwert und sind ein wichtiges Qualitätsmerkmal. Ärgerlich, wenn sich jemand durch Kopieren an fremden…
Die besten HTML5-Tipps
Neue Tipps & Tricks für blitz.io

Wer die Leistung einer Applikation ermitteln möchte, braucht keine Skripte zu schreiben, sondern kann einen der zahlreichen Online-Dienste…
image.jpg
Ratgeber: Webentwicklung

Die clientseitige Javascript-Entwicklung bietet fast keine Entwicklungsumgebungen und auch keine vernünftigen Werkzeuge zur Fehlersuche. Eine der…
internet, webdesign, meteor, webapplikationen
Ratgeber

Mit Meteor sollen Entwickler in kurzer Zeit Umgebungen für Webapplikationen erstellen können, ohne sich um lästige Details kümmern zu müssen. Wir…