tutorials.de Buch-Aktion 05/2012
  • Upload via Formular

    Dieses Tutorial ist von antihero, bitte Fragen dazu an antihero

    Der Upload via PHP ist sicher etwas, das man immer wieder brauchen kann. Außerdem funktioniert es mit PHP ziemlich einfach, deswegen mal ein kurzes Tutorial dazu. Grundwissen in PHP und HTML wird vorausgesetzt.

    Zuerst brauchen wir ein Formular, in dem der Benutzer eine Datei auswählen kann, welche hochgeladen werden soll. Ich werde hier einfach den Quelltext reinschreiben, da der HTML-Part klar sein sollte:
    Code :
    1
    2
    3
    4
    
    <form enctype="multipart/form-data" action="http://www.tutorials.de/upload.php" method="post"> 
    <input type="file" name="file"><br> 
    <input type="submit" value="hochladen"> 
    </form>
    In diesem Formular kann der Benutzer also auf „hochladen“ klicken und die im obigen Feld angegebene Datei wird hochgeladen. Das komfortable am Upload via PHP ist, dass man sich nicht darum kümmern muss, wie die Datei auf den Server kommt, sondern lediglich, wie man sie auf dem Server an den gewünschten Ort bugsieren kann. Dort setzt dann das upload.php Script ein. Ich schreibe hier den Quelltext einfach stellenweise hin, zwischendurch mit einem Kommentar, Wenn ihr alle Codesequenzen untereinander in eine leere Datei einfügt, habt ihr eine funktionierende upload.php Datei.
    Ganz wichtig ist noch, dass der Name des Upload Eingabefeldes <input type="file" [...]> nicht "file" sein muss, aber just dieser Name ist der, der in den folgenden Zeilen Code immer in der ersten Klammer nach $_FILES steht.
    PHP-Code:
    <?php 
    $tempname 
    $_FILES['file']['tmp_name']; 
    $name $_FILES['file']['name'];
    Die Datei wird via Formular auf den Server geladen und bekommt erstmal einen kryptischen Namen (zB. TxwbWerqrS) zugewiesen. Mit diesem Namen arbeiten wir, bis die Datei umbenannt wurde.
    Die Variable $name enthält den Dateinamen, den die Datei auf dem Clientrechner hatte.

    Jetzt könnte man eigentlich schon die Datei an die gewünschte Stelle verschieben, allerdings ist es ziemlich gefährlich ein Upload Script ohne Einschränkungen im Netz stehen zu haben. Kommt da der falsche User drauf, ist der Webspace am nächsten Tag evtl. schon voll mit evtl. nicht ganz legalem Material. Es ist also nur in eurem Interesse, wenn ihr die upgeloadete Datei überprüft.
    PHP-Code:
    $type $_FILES['file']['type']; 
    $size $_FILES['file']['size']; 
    Damit wird ausfindig gemacht, welchen Typ die Datei hat und wie gross sie ist. Ich weiss, man kann die Grösse des upzuloadenden Files auch schon im HTML Formular einschränken, diese Sperre kann aber leicht umgangen werden, deshalb arbeite ich hier mit der PHP Überprüfung der Dateigrösse. Die kann nämlich nicht umgangen werden (jedenfalls meines Wissens nach.
    PHP-Code:
    if($type != "image/gif" && $type != "image/pjpeg") { 
        
    $err[] = "nur gif und jpeg Dateien dürfen hochgeladen werden."

    if(
    $size "15000") { 
        
    $err[] = "Die Datei welche du hochladen willst, ist zu gross!<br>Maximale Dateigrosse beträgt 15 KB!"

    Diese erste if Abfrage prüft, ob die Datei den Typ gif oder jpeg hat, wenn nicht, wird dem Array $err ein Wert hinzugefügt. Die zweite if Abfrage prüft dann, ob die Grösse der Datei kleiner als 15000 Bytes (15 KB) ist. Wenn die Variable $err nicht leer ist, ist ein Fehler aufgetreten.
    Hier ein kleiner Einschub. Wir wissen also, das die Datei bereits auf dem Server liegt, wenn der Benutzer auf den "hochladen" Button klickt. Auch wenn die Datei zu gross ist, der Typ nicht dem entspricht den wir wollen, etc. Allerdings ist das ganze upload System so schlau aufgebaut, das die Tempdatei nach dem upload automatisch gelöscht wird, das heisst, wenn die Datei nicht anderswo hinkopiert wird, löscht der Server sie automatisch nach abarbeiten des Scripts. Diese Eigenschaft ist sehr praktisch und erspart uns viel Arbeit. Wenn unsere Prüfungen auf Grösse und Typ der Datei ein negatives Ergebnis liefern, kopieren wir Sie einfach nirgendwo hin, und sie wird automatisch gelöscht.
    PHP-Code:
    if(empty($err)) { 
        
    copy("$tempname""$name"); 
        echo 
    "Die Datei $name wurde erfolgreich hochgeladen!"

    else { 
        foreach(
    $err as $error
        echo 
    "$error<br>"

    ?> 
    Mit diesem Schritt wird die Datei in das Verzeichnis upload/images/$name verschoben. Allerdings nur, wenn keine Fehler aufgetreten ist, bzw. die $err Variable leer ist. Ansonsten wird die $err Variable ausgegeben.
    Möglicher Fehler:
    Wenn man in ein Verzeichnis hochzuladen versucht, in dem der Browser keine Schreibrechte hat, wird das zwangsläufig zu einem Fehler führen, beachtet also in welches Verzeichnis ihr die Dateien speichern wollt.
    Das Verzeichnis wohin die Datei hochgeladen wird, sollte nicht absolut angegeben werden, sondern vom "Standpunkt" des upload.php scripts aus. Wenn also ins selbe Verzeichnis hochgeladen wird, indem sich auch die upload.php Datei befindet, wäre der Pfad einfach "$name".
    Das wars, zum Grundgerüst des uploads. Bei Fragen, Unklarheiten und Korrekturen, PM an mich.

    antihero
     


    Kommentare Kommentar schreiben

    Klicke hier, um dich anzumelden

    Wie heißt die Bundeskanzlerin der BRD mit Nachnamen? Angela...