Apache Upload

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

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