| Formulare und PHP - Teil 3 (Datei Upload) |
Seite 1 von 3 Wer sich durch Teil 1 und Teil 2 dieses Tutorials die Grundlagen angeeignet hat, erfährt nun im 3. Teil, wie man über ein Formular Dateien auf einen Server laden kann. Obwohl der eigentliche Hochlade-Prozess nur ein Ein-Zeiler ist, muß man doch einiges an Know-How mitbringen, damit es hier keine bösen Überraschungen gibt. In diesem Teil lernen wir: Wie man überprüft ob überhaupt ein Upload stattfand; Ob es bei der Übertragung zu Fehler kam; Die Datei auf gültige Formate zu prüfen; Wie die Datei an ihren Bestimmungsort kommt; Dateirechte setzen, daß man die Datei auch wieder löschen kann. Das Upload FormularSchon der HTML-Teil eines Formulars für einen Datei Upload unterscheidet sich von einem "normalen" Formular das ausschließlich zum übertragen von Text-Informationen benutzt wird. Schauen wir uns zunächst einmal das HTML eines solchen Formulars an. <html> <head> <title>Datei Upload</title> </head> <body> <form name="DateiUpload" id="DateiUpload" method="post" action="" enctype="multipart/form-data"> <input type="file" name="datei" id="datei" /><br /> <input type="submit" name="submitbutton" id="submitbutton" value="Datei hochladen"> </form> </body> </html> Der erste große Unterschied findet schon direkt im form-Tag statt. Sobald ein Formular eine Datei hochladen können soll, muß der enctype angegeben werden. enctype="multipart/form-data"Ohne diesen Zusatz kann man keine Dateien auf einen Server übertragen! Als Input-Type müssen wir "file" benutzen. Dies erzeugt ein Upload-Feld mit dem man automatisch über den "Durchsuchen"-Button die Festplatte nach der entsprechenden Datei durchsuchen kann. Das ist schon alles was seitens HTML nötig ist. Binden wir noch kurz die uns bekannte Ausgabe-Funktion im PHP-Teil ein und machen einen Testlauf. Das Script sieht nun wie folgt aus ... <?php if (isset( $_POST['submitbutton'] )) { echo "<pre>" .print_r( $_POST, true ). "</pre>"; } ?> <html> <head> <title>Datei Upload</title> </head> <body> <form name="DateiUpload" id="DateiUpload" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data"> <input type="file" name="datei" id="datei"><br /> <input type="submit" name="submitbutton" id="submitbutton" value="Datei hochladen"> </form> </body> </html> Ein erster Aufruf im Browser, als Datei wähle ich testweise ein JPG Bild mit dem Name "sonnenblume.jpg" und klicke auf den Submitbutton. Hmm, irgend etwas scheint hier nicht zu stimmen, denn die Ausgabe sieht so aus: Array ( [submitbutton] => Datei hochladen ) Sollte hier nicht auch [datei] => "sonnenblume.jpg" stehen, so das wir über $_POST['datei'] auf unser Bild zugreifen können? Die Antwort ist: Nein! ... ab in ein ... ... und sehen was uns PHP mitzuteilen hat. Die Ausgabe sieht nun wie folgt aus: Array ( [datei] => Array ( [name] => sonnenblume.jpg [type] => image/jpeg [tmp_name] => C:\xampp\tmp\php6.tmp [error] => 0 [size] => 112899 ) ) Aha, das sieht doch schon besser aus. Hier sehen wir eine ganze Menge Info über unser hochgeladenes Bild. Das Superglobale Array $_FILES hält für uns verschieden Informationen bereit. Im einzelnen sind das:
Noch einmal zurück zum HTML-Teil. Wie im Error-Code 2 zu sehen ist, kann man mit MAX_FILE_SIZE eine maximal erlaubte Dateigröße vorgeben. Dies ist aber eher unzuverlässig und kann umgangen werden, deswegen habe ich es oben nicht in's HTML eingebaut. Der Vollständigkeit wegen möchte ich hier aber noch kurz zeigen wie man einen Wert festlegt. <input type="hidden" name="MAX_FILE_SIZE" value="50000"> Der Wert wird durch ein verstecktes Feld (type="hidden") übergeben und das name-Attribut muß den Namen MAX_FILE_SIZE tragen. Zwischen Groß-/Kleinschrift wird hier unterschieden! Durch das value-Attribut wird die erlaubte Größe in Byte festgelegt, hier wären das ca. 50 KB. Wichtig ist hierbei noch, daß die MAX_FILE_SIZE vor dem eigentlichen Dateifeld festgelegt werden muß. Richtig! <input type="hidden" name="MAX_FILE_SIZE" value="50000"> <input type="file" name="datei" id="datei"> Falsch! <input type="file" name="datei" id="datei"> <input type="hidden" name="MAX_FILE_SIZE" value="50000"> In Ordnung, damit sollten die Grundlagen für den Datei Upload geklärt sein. Schauen wir uns nun an wie wir mit PHP die hochgeladene Datei verarbeiten können. |