Ü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.
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"] > 0 && $_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>
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] == 1 || $size[2] == 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"] > 0 && $_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>