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 mit file_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 mit move_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.

Verwandte Einträge: