Menü:

Tutorials / Dateiupload-Formular

Über Formulare kann man nicht nur Text und Zustände von Auswahlfeldern übertragen sondern auch Dateien. In diesem Tutorial wird erläutert, wie man mit Hilfe von PHP und Formularen einen einfachen Datei-Upload realisieren kann.

Um Formularen den Dateiupload beizubringen, muss das Argument enctype="multipart/form-data" übergeben werden. Desweiteren kann dann der Feld (input) Typ "file" verwendet werden, welcher ein Textfeld mit Durchsuchen-Button erzeugt.

Optional kann man noch über ein verstecktes Formularfeld (type="hidden") mit dem Namen "MAX_FILE_SIZE" die maximale Größe der hochzuladenen Datei angeben.

Achtung: dies ist keine sichere Methode um den Upload großer Dateien zu verhindern und sollte daher nur als Comfortfunktion angesehen werden. Weitere, sicherere Möglichkeiten lernen Sie später im Tutorial kennen.

Hier finden Sie nun ein kommentiertes Beispiel für einen einfachen Dateiupload einer beliebigen lokalen Datei in das Verzeichnis, in dem das ausgeführte Skript liegt.


<?php
// Prüfen ob der Eintrag upload im Array $_POST existiert also das Formular versand wurde
if (isset($_POST["upload"])) {

    
// Upload-Status Ã¼berprüfen (automatischer Eintrag im Array)
    
if ($_FILES["file"]["error"] == UPLOAD_ERR_OK) {

        
// Ãœberprüfen Dateigrösse (Größer als 0 und kleiner als 100 000 (Wird in Byte angegeben)
        
if ($_FILES["file"]["size"] > && $_FILES["file"]["size"] < 100000) {

            
// Hochgeladene Datei in das Zielverzeichnis des Servers verschieben
            // In diesem Fall das selbe Verzeichnis des Skriptes
            
move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);

            
// Erfolgs-Meldung ausgeben
            
echo "Der Upload war erfolgreich";
            
        } else {
            
// Fehlermeldung ausgeben wenn die Dateigröße nicht zwischen 1-100000 Byte liegt
            
echo "Fehler: Dateigröße nicht im erlaubten Bereich von 1-100000 Byte";
        }
   } else {
         
// Fehlermeldung ausgeben wenn der von PHP ausgegebene Upload-Status nicht OK ist
           
echo "Fehler während der Ãœbertragung aufgetreten!";
   }
}

?>

<!-- Formular mit enctype="multipart/form-data" als Indikator für den Dateiupload -->
<form method="post" action="" enctype="multipart/form-data">
  Datei: <input type="hidden" name="MAX_FILE_SIZE" value="100000">
  <input type="file" name="file" size="40" maxlength="100000"><br />
  <input type="submit" name="upload" value="Upload">
</form>

Beispiel anzeigen (Der reale Upload wurde aus Sicherheitsgründen deaktiviert)

Nun haben Sie gelernt wie ein einfacherer Dateiupload mit Dateigrößen-Überprüfung erfolgt. Im folgenden wird erläutert, wie man noch eine Dateitypen-Unterscheidung vornehmen kann. In diesem Beispiel sollen nur JPG, PNG und GIF Dateien zugelassen werden.

<?php
// Prüfen ob der Eintrag upload im Array $_POST existiert also das Formular versand wurde
if (isset($_POST["upload"])) {

    
// Upload-Status Ã¼berprüfen (automatischer Eintrag im Array)
    
if ($_FILES["file"]["error"] == UPLOAD_ERR_OK) {

    
// Informationen zu dem hochgeladenen Bild auslesen
    
$size getimagesize($_FILES["file"]["tmp_name"]);
    
    
// Der Index 2 des Arrays $size gibt je nach Grafiktyp verschiedene Zahlen aus (1 = GIF, 2 = JPG, 3 = PNG, SWF = 4)
    // Hier werden nur gif, jpg und png also 1, 2 und 3 erlaubt
    
if($size[2] == || $size[2] == || $site[2] == 3){

            
// Ãœberprüfen Dateigrösse (Größer als 0 und kleiner als 100 000 (Wird in Byte angegeben)
            
if ($_FILES["file"]["size"] > && $_FILES["file"]["size"] < 100000) {

                
// Hochgeladene Datei in das Zielverzeichnis des Servers verschieben
                // In diesem Fall das selbe Verzeichnis des Skriptes
                
move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);

                
// Erfolgs-Meldung ausgeben
                
echo "Der Upload war erfolgreich";
                
            } else {
                
// Fehlermeldung ausgeben wenn die Dateigröße nicht zwischen 1-100000 Byte liegt
                
echo "Fehler: Dateigröße nicht im erlaubten Bereich von 1-100000 Byte";
            }
    } else {
        
// Wenn der Dateityp nicht GIF, JPEG oder PNG ist Fehlermeldung ausgeben
        
echo "Der Dateityp ist nicht erlaubt! Bitte laden Sie nur GIF, JPG oder PNG Dateien hoch";
    }
   } else {
         
// Fehlermeldung ausgeben wenn der von PHP ausgegebene Upload-Status nicht OK ist
           
echo "Fehler während der Ãœbertragung aufgetreten!";
   }

}
?>

<!-- Formular mit enctype="multipart/form-data" als Indikator für den Dateiupload -->
<form method="post" action="" enctype="multipart/form-data">
  Datei: <input type="hidden" name="MAX_FILE_SIZE" value="100000">
  <input type="file" name="file" size="40" maxlength="100000"><br />
  <input type="submit" name="upload" value="Upload">
</form>

Beispiel anzeigen (Der reale Upload wurde aus Sicherheitsgründen deaktiviert)