Apache Upload: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
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…“
 
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
Kategorie: Administration
Kategorie: PHP


= Saubere Installation der Apache2-PHP-Umgebung =
= Datei-Upload mit PHP unter Apache2 =


Für einen stabilen Betrieb unter Debian-basierten Systemen (Debian, Ubuntu) wird die Installation über die offiziellen Repositorys empfohlen. Dies stellt Sicherheitsupdates und die korrekte Integration der Dienste sicher.
Diese Anleitung beschreibt die Einrichtung eines Upload-Skripts direkt im Web-Root /var/www/html/.


== Paketinstallation ==
== Systemvorbereitung ==


Die Installation erfolgt mit Root-Rechten über den Paketmanager apt.
Die Berechtigungen werden so gesetzt, dass der Webserver-Nutzer Dateien im Zielverzeichnis ablegen kann.
 
apt update
apt install apache2 php libapache2-mod-php
 
Nach der Installation sind die Dienste automatisch aktiv. Der Status kann wie folgt kontrolliert werden:
 
systemctl status apache2
 
== Berechtigungen und Pfade ==
 
Standardmäßig liegt das Dokumentenverzeichnis unter /var/www/html/. Damit PHP-Skripte Dateien schreiben dürfen (Uploads), muss der Besitzer auf den Webserver-Nutzer angepasst werden.


  cd /var/www/html
  cd /var/www/html
Zeile 25: Zeile 14:
  chmod -R 755 /var/www/html/
  chmod -R 755 /var/www/html/


== Konfiguration prüfen ==
== Skript-Implementierung (index.php) ==
 
Ob das PHP-Modul korrekt in Apache geladen wurde, lässt sich über die Modul-Liste verifizieren:


apache2ctl -M | grep php
Der folgende Code wird direkt in /var/www/html/index.php gespeichert. Er verarbeitet den Upload und verschiebt die Datei in den Ordner uploads/.


Sollte das Modul nicht gelistet sein, muss es manuell aktiviert und der Dienst neu gestartet werden:
<?php
/**
* PHP-Skript für Datei-Uploads
* Standort: /var/www/html/index.php
*/


a2enmod php8.x  # Version entsprechend der Installation (z.B. php8.2)
$upload_dir = 'uploads/';
systemctl restart apache2
$status_message = "";


== Sicherheitsrelevante PHP-Einstellungen ==
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file_upload'])) {
   
    $file = $_FILES['file_upload'];
   
    if ($file['error'] === UPLOAD_ERR_OK) {
        $filename = basename($file['name']);
        $target_path = $upload_dir . $filename;


Die Konfiguration der Datei-Uploads erfolgt in der Datei /etc/php/8.x/apache2/php.ini. Relevante Parameter für den stabilen Betrieb:
        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'];
    }
}
?>


; Maximale Größe einer hochgeladenen Datei
<!DOCTYPE html>
upload_max_filesize = 16M
<html lang="de">
<head>
    <meta charset="UTF-8">
    <title>Upload</title>
</head>
<body>
    <h3>Datei-Upload</h3>
   
    <?php if ($status_message): ?>
        <p><strong><?php echo $status_message; ?></strong></p>
    <?php endif; ?>


; Maximale Größe der gesamten POST-Daten (muss >= upload_max_filesize sein)
    <form action="index.php" method="post" enctype="multipart/form-data">
post_max_size = 20M
        <input type="file" name="file_upload" required>
        <input type="submit" value="Hochladen">
    </form>
</body>
</html>


; Maximale Zeit in Sekunden, die ein Skript laufen darf
== Sicherheitseinstellungen ==
max_execution_time = 60


Nach Änderungen an der php.ini ist ein Neustart des Apache-Dienstes zwingend erforderlich.
Um die Ausführung von Skripten im Upload-Verzeichnis zu verhindern, wird dort eine .htaccess-Datei erstellt.


  systemctl restart apache2
  cd /var/www/html/uploads
printf "php_flag engine off\nOptions -ExecCGI" > .htaccess


[[Kategorie:Debian]]
[[Kategorie:Programmierung]]
[[Kategorie:Apache]]
[[Kategorie:Apache]]
[[Kategorie:PHP]]
[[Kategorie:PHP]]

Version vom 17. März 2026, 14:04 Uhr

Kategorie: PHP

Datei-Upload mit PHP unter Apache2

Diese Anleitung beschreibt die Einrichtung eines Upload-Skripts direkt im Web-Root /var/www/html/.

Systemvorbereitung

Die Berechtigungen werden so gesetzt, dass der Webserver-Nutzer Dateien im Zielverzeichnis ablegen kann.

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 Code wird direkt in /var/www/html/index.php gespeichert. Er verarbeitet den Upload und verschiebt die Datei in den Ordner uploads/.

<?php /**

* PHP-Skript für Datei-Uploads
* Standort: /var/www/html/index.php
*/

$upload_dir = 'uploads/'; $status_message = "";

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file_upload'])) {

   $file = $_FILES['file_upload'];
   
   if ($file['error'] === UPLOAD_ERR_OK) {
       $filename = basename($file['name']);
       $target_path = $upload_dir . $filename;
       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>Upload</title>

</head> <body>

Datei-Upload

   <?php if ($status_message): ?>

<?php echo $status_message; ?>

   <?php endif; ?>
   <form action="index.php" method="post" enctype="multipart/form-data">
       <input type="file" name="file_upload" required>
       <input type="submit" value="Hochladen">
   </form>

</body> </html>

Sicherheitseinstellungen

Um die Ausführung von Skripten im Upload-Verzeichnis zu verhindern, wird dort eine .htaccess-Datei erstellt.

cd /var/www/html/uploads
printf "php_flag engine off\nOptions -ExecCGI" > .htaccess