Upload von Dateien via PHP

Fehlerbehandlung

26.3.2010 von Redaktion pcmagazin und Tim Kaufmann

ca. 2:25 Min
Ratgeber
  1. Sichere Uploads per PHP - Bildergalerie & Co.
  2. Fehlerbehandlung
  3. Datei-Handling
  4. Dateigrößen und Schreibrechte

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
Ein einfaches Input-Feld sowie ein Submit-Button reichen für den Datei-Upload aus.
© Archiv

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 lesen

Chronologische Liste und Netflix-Links

Marvel-Filme- und -Serien: Das ist die richtige Reihenfolge

Neuerscheinungen in der Übersicht

Netflix: Neue Filme und Serien

Vorschau auf Film- und Serien-Highlights

Amazon Prime Video: Neuheiten

Weiter zur Startseite  

Mehr zum Thema

internet, webdesign, adobe,  Illustrator, CS6

Webdesign

Webdesign in Adobe Illustrator CS6

Adobe Illustrator wird im Webdesign immer beliebter. Wie Sie das Tool richtig einsetzen, erfahren Sie hier.

Facebook stellte die neue Suche

Facebook

Facebooks Social Graph Search

Was sind die Implikationen für Unternehmen und Endanwender bei Facebooks neuer Suche Graph Search?

Der BGH erklärt das Internet zur Lebensgrundlage.

Online-Recht

Darauf müssen Sie bei den AGB achten

Allgemeine Geschäftsbedingungen liest sich niemand gerne durch. Sie sind jedoch notwendig und äußerst sinnvoll. Worauf sie achten sollten.

Online-Urheberrecht: Unser Ratgeber bietet Tipps für das Cloud-Recht.

Online-Recht in der Cloud

Wie sieht das Urheberrecht in der Wolke aus?

Dateien werden immer häufiger in der Cloud bereitgestellt. Rechtlich ist das jedoch durchaus problematisch. Wir klären über das Urheberrecht in der…

Logistik im E-Commerce: Prozesse rund um die Logistik.

E-Commerce-Logistik

Logistik im E-Commerce

Für den Erfolg eines Online-Shops sind zahlreiche Faktoren verantwortlich. Neben Produktvielfalt und Darstellung der Waren gehört auch die Logistik.