0Pricing
PHP Academy · Lektion

Datei-Uploads verarbeiten

Verarbeiten Sie hochgeladene Dateien sicher mit der Superglobalen _FILES.

Datei-Uploads verarbeiten ist eine kostenlose PHP Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des PHP Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der PHP Academy-Kurs umfasst insgesamt 4 Lektionen.

Datei-Uploads in PHP – Überblick

PHP verarbeitet Datei-Uploads über das Superglobal $_FILES. Das Formular muss method="POST" und enctype="multipart/form-data" verwenden.

HTML-Upload-Formular

Einrichtung eines HTML-Formulars für einzelne und mehrere Datei-Uploads:

<!-- Single file -->
<form method="POST" action="upload.php"
      enctype="multipart/form-data">
    <input type="file" name="document">
    <button>Upload</button>
</form>

<!-- Multiple files -->
<form method="POST" enctype="multipart/form-data">
    <input type="file" name="photos[]" multiple>
    <button>Upload All</button>
</form>

Struktur von $_FILES

Jede hochgeladene Datei hat fünf Einträge in $_FILES:

<?php
$file = $_FILES['document'];

echo $file['name'];      // original name: report.pdf
echo $file['type'];      // browser-reported MIME: application/pdf
echo $file['tmp_name'];  // server temp path: /tmp/phpXXXXXX
echo $file['error'];     // error code: 0 = UPLOAD_ERR_OK
echo $file['size'];      // file size in bytes

Upload-Fehlercodes

Prüfen Sie vor der Verarbeitung immer $file['error']:

<?php
$errorMessages = [
    UPLOAD_ERR_INI_SIZE   => 'Exceeds upload_max_filesize in php.ini',
    UPLOAD_ERR_FORM_SIZE  => 'Exceeds MAX_FILE_SIZE in form',
    UPLOAD_ERR_PARTIAL    => 'Only partially uploaded',
    UPLOAD_ERR_NO_FILE    => 'No file uploaded',
    UPLOAD_ERR_NO_TMP_DIR => 'Missing temp folder',
    UPLOAD_ERR_CANT_WRITE => 'Failed to write to disk',
    UPLOAD_ERR_EXTENSION  => 'PHP extension stopped upload',
];

$err = $_FILES['doc']['error'];
if ($err !== UPLOAD_ERR_OK) {
    die($errorMessages[$err] ?? 'Unknown error');
}

Dateityp sicher validieren

Vertrauen Sie niemals dem vom Browser bereitgestellten MIME-Typ – überprüfen Sie stattdessen den tatsächlichen Dateiinhalt:

<?php
$tmp  = $_FILES['image']['tmp_name'];
$allowed = ['image/jpeg', 'image/png', 'image/webp'];

// Check real MIME type from file content
$realMime = mime_content_type($tmp);

if (!in_array($realMime, $allowed)) {
    die('Invalid file type: ' . $realMime);
}

Dateigröße validieren

Erzwingen Sie Größenbeschränkungen auf dem Server, selbst wenn das HTML-Formular ein ausgeblendetes Feld MAX_FILE_SIZE enthält:

<?php
$maxBytes = 5 * 1024 * 1024;  // 5MB
$size     = $_FILES['video']['size'];

if ($size > $maxBytes) {
    $mb = round($size / 1024 / 1024, 2);
    die("File too large: {$mb}MB (max 5MB)");
}

is_uploaded_file und move_uploaded_file

Verwenden Sie immer diese beiden Funktionen, um zu bestätigen, dass die Datei per HTTP-Upload übertragen wurde, und sie sicher zu verschieben:

<?php
$tmp  = $_FILES['photo']['tmp_name'];
$dest = '/var/www/uploads/' . basename($_FILES['photo']['name']);

if (!is_uploaded_file($tmp)) {
    die('Not an uploaded file — possible attack');
}

if (!move_uploaded_file($tmp, $dest)) {
    die('Failed to move uploaded file');
}

echo 'Upload saved to: ' . $dest;

Sichere Dateinamen erzeugen

Erzeugen Sie einen zufälligen Dateinamen, um Directory-Traversal- und Überschreibangriffe zu verhindern:

<?php
$originalName = $_FILES['doc']['name'];
$ext          = strtolower(pathinfo($originalName, PATHINFO_EXTENSION));

$allowedExts = ['jpg', 'jpeg', 'png', 'pdf'];
if (!in_array($ext, $allowedExts)) {
    die('File type not allowed');
}

$safeName = bin2hex(random_bytes(16)) . '.' . $ext;
$dest     = '/var/www/uploads/' . $safeName;

move_uploaded_file($_FILES['doc']['tmp_name'], $dest);

Mehrere Datei-Uploads verarbeiten

Bei Verwendung von name="photos[]" enthält $_FILES Arrays – durchlaufen Sie diese:

<?php
$files = $_FILES['photos'];
$count = count($files['name']);

for ($i = 0; $i < $count; $i++) {
    if ($files['error'][$i] !== UPLOAD_ERR_OK) continue;
    
    $tmp  = $files['tmp_name'][$i];
    $ext  = pathinfo($files['name'][$i], PATHINFO_EXTENSION);
    $dest = '/uploads/' . uniqid() . '.' . strtolower($ext);
    
    move_uploaded_file($tmp, $dest);
    echo "Saved: $dest" . PHP_EOL;
}

Upload-Einstellungen in php.ini

Wichtige php.ini-Direktiven, die Datei-Uploads beeinflussen:

  • file_uploads = On – Uploads aktivieren
  • upload_max_filesize = 8M – maximale Größe einer einzelnen Datei
  • post_max_size = 32M – maximale Größe des POST-Bodys (muss größer als upload_max_filesize sein)
  • max_file_uploads = 20 – maximale Anzahl von Dateien pro Anfrage

Bilder nach dem Upload skalieren

Verwenden Sie die GD-Bibliothek, um Bilder nach dem Upload zu skalieren:

<?php
function resizeImage(string $src, string $dst, int $maxW): void {
    [$w, $h, $type] = getimagesize($src);
    $ratio   = $maxW / $w;
    $newH    = (int) ($h * $ratio);
    $srcImg  = imagecreatefromjpeg($src);
    $dstImg  = imagecreatetruecolor($maxW, $newH);
    imagecopyresampled($dstImg, $srcImg, 0,0,0,0, $maxW, $newH, $w, $h);
    imagejpeg($dstImg, $dst, 90);
    imagedestroy($srcImg);
    imagedestroy($dstImg);
}

Schnelltest

Welche PHP-Funktion ist erforderlich, um eine hochgeladene Datei sicher an ihren endgültigen Speicherort zu verschieben?

Zusammenfassung: Datei-Uploads

Checkliste für die Verarbeitung von Uploads:

  • Das Formular muss method=POST enctype=multipart/form-data verwenden
  • $_FILES['field']['error'] === UPLOAD_ERR_OK prüfen
  • Den tatsächlichen MIME-Typ mit mime_content_type() validieren
  • Dateigröße serverseitig validieren
  • move_uploaded_file() verwenden – nicht rename/copy
  • Zufällige Dateinamen erzeugen, um Konflikte zu verhindern

Häufig gestellte Fragen

Ist die Lektion „Datei-Uploads verarbeiten“ kostenlos?

Ja — der vollständige Text von „Datei-Uploads verarbeiten“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des PHP Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der PHP Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Datei-Uploads verarbeiten“?

Verarbeiten Sie hochgeladene Dateien sicher mit der Superglobalen _FILES. Du übst PHP Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um PHP Academy zu starten?

Keine Vorkenntnisse erforderlich. PHP Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Datei-Uploads verarbeiten“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser PHP Academy-Lektion Code schreiben und ausführen?

Ja. Jede PHP Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Dateien mit PHP auslesen
  2. In Dateien schreiben und Daten anhängen
  3. Mit Verzeichnissen arbeiten
  4. Datei-Uploads verarbeiten
← Zurück zu PHP Academy