Apache Upload
Kategorie: PHP
Datei-Upload mit PHP unter Apache2
Diese Dokumentation beschreibt die Einrichtung eines funktionalen Datei-Uploads auf einem Apache2-Webserver. Die Lösung umfasst die Systemkonfiguration, die Verzeichnisrechte und das PHP-Skript.
Systemvorbereitung
Damit der Webserver (User: www-data) Dateien entgegennehmen und speichern kann, müssen die Verzeichnisse angelegt und die Berechtigungen korrekt gesetzt werden.
cd /var/www/html mkdir uploads chown -R www-data:www-data /var/www/html/ chmod -R 755 /var/www/html/
Skript-Implementierung (index.php)
Der folgende Quellcode wird in der Datei /var/www/html/index.php gespeichert. Das Skript verarbeitet den POST-Request, validiert den Upload-Status und verschiebt die Datei in den Zielordner.
<?php
/**
* PHP-Skript für Datei-Uploads
* Pfad: /var/www/html/index.php
*/
$upload_dir = 'uploads/';
$status_message = "";
// Prüfung ob Formular gesendet wurde
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file_upload'])) {
$file = $_FILES['file_upload'];
// Validierung des PHP-Fehlercodes
if ($file['error'] === UPLOAD_ERR_OK) {
$filename = basename($file['name']);
$target_path = $upload_dir . $filename;
// Verschieben der temporären Datei in das Zielverzeichnis
if (move_uploaded_file($file['tmp_name'], $target_path)) {
$status_message = "Datei erfolgreich hochgeladen.";
} else {
$status_message = "Fehler: Datei konnte nicht gespeichert werden.";
}
} else {
$status_message = "Upload-Fehler. Code: " . $file['error'];
}
}
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Datei-Upload Service</title>
<style>
body { font-family: sans-serif; padding: 20px; }
.upload-box { border: 1px solid #ccc; padding: 20px; width: fit-content; border-radius: 5px; }
.msg { color: #d00; font-weight: bold; margin-bottom: 15px; }
</style>
</head>
<body>
<div class="upload-box">
<h2>Upload</h2>
<?php if ($status_message): ?>
<div class="msg"><?php echo htmlspecialchars($status_message); ?></div>
<?php endif; ?>
<form action="index.php" method="post" enctype="multipart/form-data">
<input type="file" name="file_upload" required>
<br><br>
<input type="submit" value="Hochladen">
</form>
</div>
</body>
</html>
Sicherheit des Upload-Ordners
Um zu verhindern, dass hochgeladene Skripte (z. B. Schadsoftware) auf dem Server ausgeführt werden können, muss die Ausführung im Ordner uploads/ deaktiviert werden.
cd /var/www/html/uploads printf "php_flag engine off\nOptions -ExecCGI" > .htaccess chown www-data:www-data .htaccess
Fehlerbehebung
Sollte der Upload fehlschlagen, sind die PHP-Limits in der Konfigurationsdatei (z. B. /etc/php/8.x/apache2/php.ini) zu prüfen:
- file_uploads = On
- upload_max_filesize = 10M
- post_max_size = 12M
Nach Änderungen an der Konfiguration muss der Dienst neu gestartet werden:
systemctl restart apache2