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ä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äres Verzeichnis für den Upload: ' . $upload_nach . '<br>' . 'Maximale Dateigröße für den Upload von Dateien: ' . $upload_size . '<br>' . 'Maximale Größe von POST-Requests: ' . $post_max_size . '<br>' . 'Maximal verfü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ß!'; // 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öße für den Upload von Dateien ' . 'beträ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ß! ' . 'Bitte wählen Sie Dateien mit einer maximalen Größe ' . 'von ' . $max_file_size . ' Bytes aus!'; break; // Datei wurde nicht vollständig übertragen case UPLOAD_ERR_PARTIAL: echo 'Bei der Übertragung der Datei ist ein Fehler aufgetreten: ' . 'Die Datei wurde nicht vollstä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ählt. ' . 'Bitte nutzen Sie den Dateiauswahldialog, um eine Datei für den Upload auszuwä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ür den Upload: <input name="userfile" type="file"> <input type="submit" value="Datei Upload starten"> </form> </body> </html> <?php } ?>
¬ Menu
¬ Gratis Download
¬ Tutorials
¬ Seminare
¬ Yoga
¬ Insolvenzrecht
¬ News
15.08.2008Schleifen in PHP: Die While-Schleife » mehr 13.08.2008Nutzung von Variablen unter PHP: Definition, Sichtbarkeit und vordefinierte Variablen » mehr 11.08.2008Ausgabe von Datum und Zeit mit PHP nach Konvertierung in ein String » mehr Eine vollständige News-Liste ist auf der News-Seite zugänglich.
¬ Foren
¬ Buchtipp
PHP & MySQL
Weitere PHP Bücher finden Sie unter PHP Literatur