PHP - Datei-Upload

Ein PHP-Skript kann mit einem HTML-Formular verwendet werden, damit Benutzer Dateien auf den Server hochladen können. Zunächst werden Dateien in ein temporäres Verzeichnis hochgeladen und dann von einem PHP-Skript an ein Ziel verschoben.

Informationen in der phpinfo.php Seite beschreibt das temporäre Verzeichnis, das für das Hochladen von Dateien als verwendet wird upload_tmp_dir und die maximal zulässige Größe von Dateien, die hochgeladen werden können, wird als angegeben upload_max_filesize. Diese Parameter werden in der PHP-Konfigurationsdatei festgelegtphp.ini

Das Hochladen einer Datei erfolgt folgendermaßen:

  • Der Benutzer öffnet die Seite mit einem HTML-Formular mit Textdateien, einer Schaltfläche zum Durchsuchen und einer Schaltfläche zum Senden.

  • Der Benutzer klickt auf die Schaltfläche zum Durchsuchen und wählt eine Datei aus, die vom lokalen PC hochgeladen werden soll.

  • Der vollständige Pfad zur ausgewählten Datei wird im abgelegten Text angezeigt. Anschließend klickt der Benutzer auf die Schaltfläche "Senden".

  • Die ausgewählte Datei wird an das temporäre Verzeichnis auf dem Server gesendet.

  • Das PHP-Skript, das im Aktionsattribut des Formulars als Formularhandler angegeben wurde, überprüft, ob die Datei angekommen ist, und kopiert die Datei dann in ein vorgesehenes Verzeichnis.

  • Das PHP-Skript bestätigt dem Benutzer den Erfolg.

Wie beim Schreiben von Dateien üblich, müssen sowohl für temporäre als auch für endgültige Speicherorte Berechtigungen festgelegt sein, die das Schreiben von Dateien ermöglichen. Wenn beides schreibgeschützt ist, schlägt der Prozess fehl.

Eine hochgeladene Datei kann eine Textdatei, eine Bilddatei oder ein beliebiges Dokument sein.

Erstellen eines Upload-Formulars

Der folgende HTM-Code erstellt ein Uploader-Formular. Für dieses Formular ist das Methodenattribut festgelegtpost und das Attribut enctype ist auf gesetzt multipart/form-data

<?php
   if(isset($_FILES['image'])){
      $errors= array();
      $file_name = $_FILES['image']['name'];
      $file_size =$_FILES['image']['size'];
      $file_tmp =$_FILES['image']['tmp_name'];
      $file_type=$_FILES['image']['type'];
      $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
      
      $extensions= array("jpeg","jpg","png");
      
      if(in_array($file_ext,$extensions)=== false){
         $errors[]="extension not allowed, please choose a JPEG or PNG file.";
      }
      
      if($file_size > 2097152){
         $errors[]='File size must be excately 2 MB';
      }
      
      if(empty($errors)==true){
         move_uploaded_file($file_tmp,"images/".$file_name);
         echo "Success";
      }else{
         print_r($errors);
      }
   }
?>
<html>
   <body>
      
      <form action="" method="POST" enctype="multipart/form-data">
         <input type="file" name="image" />
         <input type="submit"/>
      </form>
      
   </body>
</html>

Es wird das folgende Ergebnis erzeugt -

Erstellen eines Upload-Skripts

Es gibt eine globale PHP-Variable namens $_FILES. Diese Variable ist ein zugeordnetes zweidimensionales Array und enthält alle Informationen zur hochgeladenen Datei. Wenn also der Wert, der dem Namensattribut der Eingabe im Upload-Formular zugewiesen wurde, warfile, dann würde PHP folgende fünf Variablen erstellen -

  • $_FILES['file']['tmp_name'] - die hochgeladene Datei im temporären Verzeichnis auf dem Webserver.

  • $_FILES['file']['name'] - der tatsächliche Name der hochgeladenen Datei.

  • $_FILES['file']['size'] - die Größe der hochgeladenen Datei in Byte.

  • $_FILES['file']['type'] - Der MIME-Typ der hochgeladenen Datei.

  • $_FILES['file']['error'] - Der mit diesem Datei-Upload verbundene Fehlercode.

Beispiel

Das folgende Beispiel sollte das Hochladen von Bildern ermöglichen und das Ergebnis als hochgeladene Dateiinformationen zurückgeben.

<?php
   if(isset($_FILES['image'])){
      $errors= array();
      $file_name = $_FILES['image']['name'];
      $file_size = $_FILES['image']['size'];
      $file_tmp = $_FILES['image']['tmp_name'];
      $file_type = $_FILES['image']['type'];
      $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
      
      $extensions= array("jpeg","jpg","png");
      
      if(in_array($file_ext,$extensions)=== false){
         $errors[]="extension not allowed, please choose a JPEG or PNG file.";
      }
      
      if($file_size > 2097152) {
         $errors[]='File size must be excately 2 MB';
      }
      
      if(empty($errors)==true) {
         move_uploaded_file($file_tmp,"images/".$file_name);
         echo "Success";
      }else{
         print_r($errors);
      }
   }
?>
<html>
   <body>
      
      <form action = "" method = "POST" enctype = "multipart/form-data">
         <input type = "file" name = "image" />
         <input type = "submit"/>
			
         <ul>
            <li>Sent file: <?php echo $_FILES['image']['name'];  ?>
            <li>File size: <?php echo $_FILES['image']['size'];  ?>
            <li>File type: <?php echo $_FILES['image']['type'] ?>
         </ul>
			
      </form>
      
   </body>
</html>

Es wird das folgende Ergebnis erzeugt -