Manchmal müssen Besucher Dateien senden können, etwa ein Foto bei einer Online-Bewerbung oder einen ausgefüllten PDF-Fragebogen. Dafür einen FTP-Zugang einzurichten, ist schon lange nicht mehr zeitgemäß, zumal PHP doch über eine einfache und sichere Upload-Funktionen verfügt.
Viel muss man nicht beachten. Der Form-Befehl bekommt das hierfür wichtige enctype-Attribut, dem Formular wird gleich die maximal erlaubte Dateigröße mitgeben. Der Wert für 50KB wäre hier 50000, für 100KB dann 100000.
<form
action="upload.php" name="upl" method=post
enctype="multipart/form-data">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="50000">
Jetzt fehlt noch ein Feld für die Datei-Auswahl. Der hier angegebene Name „userfile“ wird nachher für alle Informationen über die Datei benötigt.
Quellcode für das Formular:
<form action="upload.php"
name="upl" method=post
enctype="multipart/form-data">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="50000">
Name:<br>
<INPUT NAME="username" TYPE="text" style="width:350px;"><br><br>
Datei:<br>
<INPUT NAME="userfile" TYPE="file" style="width:350px;"
value="">
<br><input type="submit" value=" Hochladen ">
</form>
Jetzt sollte man sich Gedanken über die Weiterverarbeitung machen. Die Dateien werden später mittels PHP in ein Verzeichnis verschoben, dass vorher angelegt werden muss. Um Ordnung zu halten, sollten die Dateinamen ordentlich formatiert werden.
Die hochgeladenen Dateien auf dem Server
Aus diesem Grund befindet sich in dem Formularfeld bereits die Abfrage für den Namen des Besuchers. Dieser wird zusammen mit dem aktuellen Datum und dem ursprünglichen Dateinamen für den Dateinamen auf dem Server verwendet. Dieser wird dadurch zwar recht lang, die Datei lässt sich aber sowohl nach Datum wie Namen gut zuordnen.
Der Quellcode der Datei upload.php ist auch nicht viel länger. Zuerst werden die Variablen ausgelesen und daraus der neue Dateiname $filename erstellt. Dann wird die Datei aus dem temporären Server-Verzeichnis dahin kopiert, wo wir sie gebrauchen können, in den Ordner „neue_dateien“.
<?php
$datum = date(d)."-".date(m)."-".date(Y);
//erstelle den Upload auf dem Server
$userfile = $_POST['userfile']; $name = $_POST['name'];
If(trim($userfile != "none") && ($userfile != ""))
{
$filename = str_replace(" ","-",$username)."-".$datum."-".$userfile_name;
move_uploaded_file($userfile, "neue_dateien/$filename");
$bild = "autoren_dateien/$filename";
$ort .= "Die hochgeladene Datei liegt hier: http://www.server.de/$bild\n";
echo $ort;
} else { echo "fehler: keine Datei angegeben!"; }
?>
Die Variable $ort enthält den direkten Pfad zu der Datei. Dieser kann nun entweder gespeichert, per Email an den Webmaster geschickt oder zur Ausgabe an den Browser des Besuchers übermittelt werden.
Die Fehlermeldung „Fehler: keine Datei angegeben!“ erscheint nur, wenn der Besucher keine Datei gewählt hat, oder die gewählte Datei größer ist, als über MAX_FILE_SIZE im Formular angegeben.
Als Ergänzung lassen sich vor dem eigentlichen Speichern noch falsche Dateitypen ausfiltern. Wer PDFs verlangt, möchte schließlich keine Word-Dateien entgegennehmen müssen.
Statt der Zeile:
If(trim($userfile != "none")
&& ($userfile != "")) {
nutzen wir eine erweiterte:
if
($userfile_type != "image/gif" && $userfile_type != "image/jpeg"
&& $userfile_type != "image/pjpeg" && $userfile_type
!= "image/jpg") {
echo 'Fehler: Keine Datei oder falscher Dateityp: Nur GIF- und JPEG Bilder';
} else {
Gleichzeitig muss die letzte Zeile mit der Else-Bedingung gelöscht werden:
} else { echo "fehler: keine Datei angegeben!";
}
Ist die Datei nun weder GIF noch JPEG, wird eine Fehlermeldung ausgegeben, anderenfalls die Datei ganz normal kopiert.
Wie hilfreich war dieser Beitrag?
Klicke auf die Sterne um zu bewerten!
Durchschnittliche Bewertung 0 / 5. Anzahl Bewertungen: 0
3 Antworten zu „Dateien entgegennehmen: Upload via PHP“
— was ist Deine Meinung?
Na dieser Artikel ist die Webspaceverschwendung.
Wenn es kein Schwein benutzt, wo ist dann Webspace verschwendet worden?
Das benutzt doch kein Schwein. Was für eine Verschwendung von webspace.