PHP-Datei-Upload

Mit PHP können Sie Dateien auf den Server hochladen.

Erstellen eines Dateiupload-Formulars

Erlauben Sie Benutzern, Dateien von einem Formular hochzuladen, ist sehr nützlich.

Sehen Sie sich bitte unten dieses HTML-Formular zum Dateiupload an:

<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Dateiname:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

Beachten Sie bitte die folgenden Informationen zu diesem Formular:

Das Attribut enctype der <form>-Tag definiert, welche Inhaltstypen beim Übermitteln des Formulars verwendet werden sollen. Verwenden Sie "multipart/form-data", wenn das Formular binäre Daten wie Dateinhalte benötigt.

Das Attribut type="file" der <input>-Tag definiert, dass der Eingang als Datei behandelt werden soll. Zum Beispiel, wenn Sie im Browser die Vorschau betrachten, sehen Sie neben dem Eingabefeld einen Schaltknopf.

Anmerkung:Erlauben Sie Benutzern, Dateien hochzuladen, ist ein großer Sicherheitsrisiko. Erlauben Sie nur vertrauenswürdigen Benutzern, Dateiupload-Operationen durchzuführen.

Erstellen eines Upload-Skripts

"upload_file.php" Datei enthält den Code zur Dateiupload:

<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "Fehler: " . $_FILES["file"]["error"] . "<br />";
  }
else
  {
  echo "Upload: " . $_FILES["file"]["name"] . "<br />";
  echo "Typ: " . $_FILES["file"]["type"] . "<br />";
  echo "Größe: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  echo "Gespeichert in: " . $_FILES["file"]["tmp_name"];
  }
?>

Durch die Verwendung des globalen Arrays $_FILES von PHP können Sie Dateien von einem Client-Computer auf einen Remote-Server hochladen.

Der erste Parameter ist der input name des Formulars, der zweite Index kann "name", "type", "size", "tmp_name" oder "error" sein. So wie hier:

  • $_FILES["file"]["name"] - Name der hochgeladenen Datei
  • $_FILES["file"]["type"] - Typ der hochgeladenen Datei
  • $_FILES["file"]["size"] - Größe der hochgeladenen Datei in Bytes
  • $_FILES["file"]["tmp_name"] - Name der temporären Kopie der Datei auf dem Server
  • $_FILES["file"]["error"] - Fehlercode, der durch das Hochladen einer Datei verursacht wird

Dies ist eine sehr einfache Methode zum Dateiupload. Aus Sicherheitsgründen sollten Sie Einschränkungen hinzufügen, welche Benutzer berechtigt sind, Dateien hochzuladen.

Uploadbeschränkungen

In diesem Skript haben wir Einschränkungen für die Dateiupload hinzugefügt. Der Benutzer kann nur .gif- oder .jpeg-Dateien hochladen, und die Dateigröße muss kleiner als 20 kb sein:

<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Fehler: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Typ: " . $_FILES["file"]["type"] . "<br />";
    echo "Größe: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Gespeichert in: " . $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo "Ungültige Datei";
  }
?>

Anmerkung:Für IE muss die Typenbezeichnung der jpg-Datei pjpeg sein, für Firefox jpeg.

Speicherung der hochgeladenen Datei

In diesem Beispiel wurde im PHP- temporären Verzeichnis des Servers eine temporäre Kopie der hochgeladenen Datei erstellt.

Diese temporäre Kopie des Dateifiles wird am Ende des Skripts verschwinden. Um die hochgeladene Datei zu speichern, müssen wir sie an einen anderen Ort kopieren:

<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Rückgabecode: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Typ: " . $_FILES["file"]["type"] . "<br />";
    echo "Größe: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp Datei: " . $_FILES["file"]["tmp_name"] . "<br />";
    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " bereits existiert. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Gespeichert in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Ungültige Datei";
  }
?>

Der obige Skript überprüft, ob diese Datei bereits existiert. Falls nicht, wird die Datei in den angegebenen Ordner kopiert.

Anmerkung:Dieser Beispielcode speichert die Datei in einem neuen Ordner namens "upload".