PHP-Dateiupload mit Größen- und Typprüfung
Eingeordnet in Informatik
Geschrieben am in
Deutsch mit einer Größe von 3,64 KB
Programmierung: Dateiupload in PHP
Hinweis: Der Code ist als Kommentar-Block eingeleitet (//::::::::::::::::::::::::::::::: DOCUMENT).
Konstanten und Pfade
Die Funktion define('MAX_FILE_SIZE', 3000000) ist eine Konstante und legt die maximale Dateigröße auf etwa 3.000.000 Bytes (ca. 3 MB) fest.
define('UPLOAD_DIR2', 'Dokumente/'); legt das Zielverzeichnis für hochgeladene Dateien fest.
Vorbereitung der Dateinamen und Größen
$File = str_replace(' ', '_', $_FILES['file']['name']); ersetzt Leerzeichen im Dateinamen durch Unterstriche.
$Max = number_format(MAX_FILE_SIZE / 2048, 1) . ' KB'; berechnet die maximal erlaubte Größe in KB für die Ausgabe.
$Size = number_format($_FILES['file']['size'] / 2048, 1) . ' KB'; berechnet die Größe der hochgeladenen Datei in KB.
Erlaubte Dateitypen
$Tipo_permitido = array('application/msword'); definiert den erlaubten Dateityp. Wichtig: Nur Word-Dokumente dürfen hochgeladen werden.
Prüfung von Größe und Typ
Zu Beginn sind $SizeOK und $TypeOK auf false gesetzt. Die Größe wird geprüft:
if ($_FILES['file']['size'] > 0 && $_FILES['file']['size'] <= MAX_FILE_SIZE)
Ist die Größe korrekt, wird $SizeOK = true; gesetzt. Anschließend wird der Dateityp in einer foreach-Schleife mit dem erlaubten Typ verglichen. Bei Übereinstimmung wird $TypeOK = true; gesetzt und die Schleife mit break verlassen.
Upload und Behandlung von Duplikaten
Ist sowohl die Größe als auch der Typ korrekt, wird über den Fehlercode der Datei verzweigt:
- Fehlercode 0: Die Datei wird verarbeitet. Eine
while-Schleife prüft mitfile_exists(), ob bereits eine Datei mit gleichem Namen existiert. Ist dies der Fall, wird der Zähler erhöht und der Dateiname mit einer Nummer versehen, z. B.name(1).doc. Anschließend wird die Datei mitmove_uploaded_file()verschoben. - Fehlercode 3: Die Datei wurde nur teilweise hochgeladen.
- Standard: Allgemeine Fehlermeldung.
Bei erfolgreichem Upload wird die Verbindung zur Datenbank mit connect() hergestellt. Die Variable $Extra wird abhängig von $_SESSION['num'] gesetzt.
Fehlermeldungen
- Kein Fehlercode 4 (keine Datei ausgewählt): „Keine Datei ausgewählt“
- Falscher Dateityp: „Die Datei hat keine erlaubte Erweiterung: gif, jpg, png oder Word-Dokument“
- Zu große Datei: „Die Datei kann nicht gesendet werden. Maximale Größe: $Max“
Speichern in der Datenbank
Wenn $success1 und $success2 erfolgreich sind, wird ein Datensatz in die Tabelle users eingefügt:
$Result = mysql_query("INSERT INTO users VALUES ('$login', '$password', '$name', '$level', '$url', '$file')", $Link) or die("Connection Failed");
Anschließend erfolgt eine Weiterleitung zur Seite login.php mit header('Refresh: 0; url=login.php');.
Hinweis zur Sicherheit
Achtung: Die Funktion mysql_query() ist veraltet und wurde in PHP 7 entfernt. Außerdem ist die direkte Einbindung von Variablen in SQL-Abfragen anfällig für SQL-Injection. Verwenden Sie stattdessen mysqli oder PDO mit Prepared Statements.