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 bytesUpload-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 aktivierenupload_max_filesize = 8M– maximale Größe einer einzelnen Dateipost_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-dataverwenden $_FILES['field']['error'] === UPLOAD_ERR_OKprü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
- Dateien mit PHP auslesen
- In Dateien schreiben und Daten anhängen
- Mit Verzeichnissen arbeiten
- Datei-Uploads verarbeiten