Dateiupload mit PHP

veröffentlicht am 16. Januar 2010

Ich habe vor kurzem eine Lösung gesucht, um Dateien per HTML-Formular auf einen Webserver hochladen zu können und habe dabei diesen Artikel auf php-einfach.de gefunden. Der gezeigte Upload-Mechanismus per HTML-Formular in Verbindung mit PHP ist wirklich einfach zu implementieren.

Zunächst muss man folgendes Formular einbinden:

<form action="upload.php" method="post" enctype="multipart/form-data">
  <p>
    <input type="file" name="file" />
    <input type="submit" value="Hochladen" />
  </p>
</form>

Danach implementiert man die Datei upload.php, an welche die hochgeladene Datei übergegeben wird:

<?php move_uploaded_file($_FILES['file']['tmp_name'], $_FILES['datei']['name']); ?>

Der erste Parameter gibt hierbei den temporären Pfad der hochgeladenen Datei auf dem Webserver an, mit dem zweiten Parameter kann man den Zielordner und den gewünschten Dateinamen angeben. In diesem Fall landet die hochgeladene Datei in dem derzeitigen Ordner mit dem originalen Dateinamen.

Möchte man Dateien z.B. in den Ordner uploads direkt unter dem Hauptverzeichnis der Webseite (also /uploads) hochladen, müsste man das Script wie folgt anpassen:

<?php move_uploaded_file($_FILES['file']['tmp_name'], "/uploads/".$_FILES['datei']['name']); ?>

Wichtig: der gewünschte Zielordner muss das Schreiben auch erlauben. Auf Linux-Webservern kann man dem Verzeichnis mit chmod 777 sämtliche Rechte zuteilen. Über die hochzuladenden Dateien können diverse Informationen ausgelesen werden. So ermittelt man den originalen Dateinamen über

$_FILES['file']['name']

Den temporären Pfad und Dateinamen auf dem Webserver ermittelt man hingegen wie folgt:

$_FILES['file']['tmp_name']

Die Größe in Bytes findest du so heraus:

$_FILES['file']['size']

Und den MIME-Type der Datei kannst du so herausfinden:

$_FILES['file']['type']

Praxisbeispiel

Das folgende Script prüft zunächst, ob es sich bei der hochzuladenden Datei um eine JPEG-Datei handelt, die eine Dateigröße von 1MB nicht überschreitet. Sind diese beiden Einschränkungen erfüllt, wird die Datei unter Beibehaltung des originalen Dateinamens in den Ordner /upload hochgeladen:

<?php
  if($_FILES['file']['type'] == "image/jpeg" && $_FILES['file']['size'] <= 1*1024*1024) {
    move_uploaded_file($FILES['file']['tmp_name'], "/upload/".$_FILES['file']['name']);
  }
?>

Ich hoffe, dass diese Anleitung dem ein oder anderen dabei helfen kann, einen Dateiupload zu implementieren.

Hinterlasse einen Kommentar