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 } ?>
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 beantwortetHallo 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 beantwortetMein 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 AntwortHallo,
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
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 AntwortHallo,
ich nehme an, dass \n im Beschreibungstext nicht funktioniert aber versuchen kann man es. Ansonsten: Schon mal mit einer UTF-Sequenz ... » mehr
Hallo alle miteinander, ich hoffe, dass mit hier jemand helfen kann. Ich habe mir hier von der Seite die Bildergalerie mit JS und PHP ... » mehr
von Saga am Dienstag, 28. Dezember 2010 09:57 in PHP - bisher 6 AntwortenHallo Alex,
die Warnung ist zwar jetzt durch das isset weg, aber die Daten werden immer noch nicht übergeben. (Nachdem ich durch das isset die ... » mehr
¬ 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

Einstieg in PHP 5.1 & MySQL 5, m. CD-ROM
Weitere PHP Bücher finden Sie unter PHP Literatur