PHP Datei Beispiel: PHP File Upload – Dateien mit einem Formular hochladen

Häufig bieten HTML-Formulare die Möglichkeit, neben Texteingaben und Eingaben mittels Checkboxen oder Radiobuttons, auch Dateien hochzuladen. Derartige Formulare werden beispielsweise in diversen Communities verwendet um Avatare, Videos oder Fotos auf den Server hochzuladen, die dann im Profil des Benutzers angezeigt werden. Aber auch in den Formularen von Job-Börsen, wo Bewerber in einem Lebenslauf ihr berufliches Profil darlegen können, ist der Upload von Dateien – meist in Form von PDF- oder Textdokumenten – zu finden.

Damit Uploads mit PHP auch funktionieren müssen einige Rahmenbedingungen gegeben sein, die über die Konfigurationsdatei des PHP-Systems (php.ini) festgelegt werden können. So muss das Hochladen von Dateien – mittels eines Konfigurationseintrages von file_uploads – grundsätzlich erlaubt sein. Darüber hinaus bestehen Beschränkungen bzgl. der Dateigröße von hochzuladenden Dateien. Wichtig sind hier die Einträge max_filesize, post_max_size und memory_limit. Diese sind Standardmäßig auf 2, 8 und 8 MB gesetzt, können aber je nach Konfiguration abweichen. Zu beachten ist hier, dass die Werte max_filesize < post_max_size < memory_limit gesetzt werden. Mit dem PHP-Script im nächsten Script-Abschnitt werden die durch die Serverkonfiguration gesetzten Werte ausgelesen und entsprechend formatiert ausgegeben.

<?php
    // Informationen zur Konfiguration von PHP File Uploads ermitteln und ausgeben
    $upload = (get_cfg_var ('file_uploads') ? 'erlaubt' : 'nicht erlaubt');
    $upload_nach = (get_cfg_var ('upload_tmp_dir') ? get_cfg_var ('upload_tmp_dir') : 'nicht in PHP.INI angegeben (Tempor&auml;res Verzeichnis des Systems)');
    $upload_size = (get_cfg_var ('max_filesize') ? get_cfg_var ('max_filesize') : 'nicht in PHP.INI angegeben (evtl. Standardwert von 2MB)');
    $post_max_size = (get_cfg_var ('post_max_size') ? get_cfg_var ('post_max_size') : 'nicht in PHP.INI angegeben (evtl. Standardwert von 8MB)');
    $memory_limit = (get_cfg_var ('memory_limit') ? get_cfg_var ('memory_limit') : 'nicht in PHP.INI angegeben (evtl. Standardwert von 8MB)');
    echo 'File Uploads: ' . $upload . '<br>' .
         'Tempor&auml;res Verzeichnis f&uuml;r den Upload: ' . $upload_nach . '<br>' .
         'Maximale Dateigr&ouml;&szlig;e f&uuml;r den Upload von Dateien: ' . $upload_size . '<br>' .
         'Maximale Gr&ouml;&szlig;e von POST-Requests: ' . $post_max_size . '<br>' .
         'Maximal verf&uuml;gbarer Speicher zur Verarbeitung von Seitenanfragen: ' . $memory_limit . '<br>';
?>

Der folgende Script-Code implementiert ein Upload-Formular und das zur Verarbeitung nötige Upload-Script in PHP. Das Beispiel können Sie einfach kopieren und in einer PHP-Datei – beispielsweise mit dem Namen upload.php – auf Ihrem Webserver abspeichern. Beim Aufruf der ensprechenden URL wird eine HTML-Seite mit einem Formular angezeigt, das zum Upload einer Datei auffordert.

<?php
    // Mit PHP Datei hochladen (php file upload)
    // Maximale Dateigröße der zum Upload vorgesehenen Datei festlegen.
    // Diese Angabe muss in Bytes erfolgen (hier liegt die Beschränkung bei 3 MB)
    $max_file_size = 3 * 1024 * 1024;
    // Wurde die URL direkt aufgerufen oder erfolgte schon ein Datei-Upload?
    if (!empty ($_FILES)) {
        // Upload der Datei bereits erfolgt, da die Files-Variable nicht leer ist
        // Auf den Status des Dateiuploads entsprechend reagieren
        switch ($_FILES['userfile']['error']) {
            // Upload war erfolgreich - Hier folgt die weitere Behandlung der Datei
            case UPLOAD_ERR_OK:
                // Nach erfolgreichem Upload der Datei folgt hier die weitere
                // Verarbeitung der hochgeladenen Datei. Im Beispiel wird die Datei 
                // unter ihrem eigenen Dateinamen in ein Unterverzeichnis gespeichert.
                // Zunächst wird geklärt, ob die unter dem temporären Namen gespeicherte Datei
                // auch zuvor hochgeladen wurde
                if (is_uploaded_file ($_FILES['userfile']['tmp_name']))
                    // Verschieben der hochgeladenen Datei in ein dafür vorgesehenes Verzeichnis
                    move_uploaded_file ($_FILES['userfile']['tmp_name'], 'daten/' . $_FILES['userfile']['name']);
                break;
            // Datei war zu groß (in der php.ini gesetzte maximale Dateigröße überschritten)
            case UPLOAD_ERR_INI_SIZE:
                echo 'Upload fehlgeschlagen: Die von Ihnen angegebene Datei ist zu gro&szlig;!';
                // In der php.ini angegebene maximale Dateigröße für Uploads ausgeben, falls
                // diese per Konfiguration festgelegt wurde.
                if (get_cfg_var ('max_filesize'))
                    echo ' Die maximale Gr&ouml;&szlig;e f&uuml;r den Upload von Dateien ' .
                         'betr&auml;gt ' . get_cfg_var ('max_filesize') . ' Bytes!';
                break;
            // Im Formular angegebene Dateigrößenbeschränkung wurde überschritten
            case UPLOAD_ERR_FORM_SIZE:
                echo 'Die von Ihnen angegebene Datei ist zu Gro&szlig;! ' .
                     'Bitte w&auml;hlen Sie Dateien mit einer maximalen Gr&ouml;&szlig;e ' .
                     'von ' . $max_file_size . ' Bytes aus!';
                break;
            // Datei wurde nicht vollständig übertragen
            case UPLOAD_ERR_PARTIAL:
                echo 'Bei der &Uuml;bertragung der Datei ist ein Fehler aufgetreten: ' .
                     'Die Datei wurde nicht vollst&auml;ndig durch den Server empfangen! ' .
                     'Bitte versuchen Sie es nocheinmal.';
                break;
            // Es wurde keine Datei zum Upload angegeben
            case UPLOAD_ERR_NO_FILE:
                echo 'Sie haben keine Datei zum Upload ausgew&auml;hlt. ' .
                     'Bitte nutzen Sie den Dateiauswahldialog, um eine Datei f&uuml;r den Upload auszuw&auml;hlen.';
                break;
        }
    }
    else {
        // Die Seite wurde nicht als Folge eines Form-Submits aufgerufen.
        // Aus diesem Grunde muss das Formular angezeigt werden.
        ?>
        <html>
            <head>
                <title>PHP File Upload Beispiel</title>
            </head>
            <body>
                <form enctype="multipart/form-data" action="" method="post">
                    <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $max_file_size ?>">
                    Datei f&uuml;r den Upload: <input name="userfile" type="file">
                    <input type="submit" value="Datei Upload starten">
                </form>
            </body>
        </html>
        <?php
    }
?>
Letzte Posts aus unserem Forum

Wer kennt .....

Hallo erstmal wer kennt von euch einen WEbprogrammieren,desginer der mir eine Seite erstellen kann ,Communityportal sowas in der art wie ... » mehr

von NCWebmaster am Mittwoch, 7. Oktober 2009 00:32 in PHP - bisher 2 Antworten
Letzter Beitrag: Montag, 17. Dezember 2012 16:57 von maharadja

...einen guten Onlineshop für Taufringe? Ich habe bisher Taufringe Direkt gefunden und wollte mal nachhaken, ob der Shop für Taufringe wirklich so ... » mehr

Webentwickler Konferenz in Hamburg

Hallo Zusammen, Am 20./21. Mai findet in Hamburg die erste Developer Conference 2011 statt. Wie der Name bereits verrät, handelt die Konferenz rund ... » mehr

von devcon-hamburg am Dienstag, 12. April 2011 16:50 in PHP - noch nicht beantwortet

bedingte Weiterleitung in Kontaktformularen

Hallo zusammen, ich habe ein kleines Problem: Ich brauche bei der Entwicklung eines Kontaktformulares für eine Website eine bedingte Weiterleitung ... » mehr

von scatha am Donnerstag, 10. März 2011 01:12 in PHP - noch nicht beantwortet

Gesucht: Auslesen einer externen Website

Mein vorhaben ist recht simpel aber ich bin php noob (hoffe das entschuldigt es nen bissl xD) und hab kp wie ichs anfangen soll. Und zwar möchte ich ... » mehr

von HeathenMan am Dienstag, 1. Februar 2011 22:57 in PHP - bisher 1 Antwort
Letzter Beitrag: Donnerstag, 3. Februar 2011 14:43 von alm

Hallo, am einfachsten und kompaktesten kann man das mit einem regulären Ausdruck machen. Einfach mal nach der Funktion preg_match_all suchen und den ... » mehr

Zeilenumbruch in der Bildergalerie-Beschriftung

Hallo, die Bildergalerie mit php und js ist super, jedoch möchte ich gern zu meinen Bildern verschiedene Bemerkungen machen und zwar untereinander, ... » mehr

von Sylma am Mittwoch, 26. Januar 2011 01:13 in PHP - bisher 1 Antwort
Letzter Beitrag: Freitag, 28. Januar 2011 10:16 von alm

Hallo, ich nehme an, dass \n im Beschreibungstext nicht funktioniert aber versuchen kann man es. Ansonsten: Schon mal mit einer UTF-Sequenz ... » mehr

¬ Tutorials



¬ Insolvenzrecht