Apache Upload: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „Kategorie: Administration = Saubere Installation der Apache2-PHP-Umgebung = Für einen stabilen Betrieb unter Debian-basierten Systemen (Debian, Ubuntu) wird…“) |
|||
| (Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
| − | Kategorie: | + | 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. | |
| − | + | <syntaxhighlight lang="php"> | |
| + | <?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> | ||
| + | </syntaxhighlight> | ||
| − | + | == 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 | + | Nach Änderungen an der Konfiguration muss der Dienst neu gestartet werden: |
systemctl restart apache2 | systemctl restart apache2 | ||
| − | [[Kategorie: | + | [[Kategorie:Programmierung]] |
[[Kategorie:Apache]] | [[Kategorie:Apache]] | ||
[[Kategorie:PHP]] | [[Kategorie:PHP]] | ||
Aktuelle Version vom 17. März 2026, 12:05 Uhr
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