Apache Upload: Unterschied zwischen den Versionen
| Zeile 3: | Zeile 3: | ||
= Datei-Upload mit PHP unter Apache2 = | = Datei-Upload mit PHP unter Apache2 = | ||
| − | Diese | + | 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 == | == 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 | cd /var/www/html | ||
| Zeile 16: | Zeile 16: | ||
== Skript-Implementierung (index.php) == | == Skript-Implementierung (index.php) == | ||
| − | Der folgende | + | 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 | + | <syntaxhighlight lang="php"> |
| − | /** | + | <?php |
| − | + | /** | |
| − | + | * PHP-Skript für Datei-Uploads | |
| − | + | * Pfad: /var/www/html/index.php | |
| + | */ | ||
| − | $upload_dir = 'uploads/'; | + | $upload_dir = 'uploads/'; |
| − | $status_message = ""; | + | $status_message = ""; |
| − | if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file_upload'])) { | + | // 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> | + | <!DOCTYPE html> |
| − | <html lang="de"> | + | <html lang="de"> |
| − | <head> | + | <head> |
| − | + | <meta charset="UTF-8"> | |
| − | + | <title>Datei-Upload Service</title> | |
| − | </head> | + | <style> |
| − | <body> | + | 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"> | |
| − | </body> | + | </form> |
| − | </html> | + | </div> |
| + | </body> | ||
| + | </html> | ||
| + | </syntaxhighlight> | ||
| − | == | + | == Sicherheit des Upload-Ordners == |
| − | Um | + | 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 | cd /var/www/html/uploads | ||
printf "php_flag engine off\nOptions -ExecCGI" > .htaccess | 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 | ||
[[Kategorie:Programmierung]] | [[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