Apache Upload

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

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