PHP Upload de fichier ou téléchargements de fichiers sur votre serveur

Un aspect très utile de PHP est sa capacité à gérer les téléchargements de fichiers sur votre serveur.

Permettre aux utilisateurs de télécharger un fichier sur votre serveur peut être la cause d’une catastrophe, donc s'il vous plaît soyez prudent lorsque vous activez le téléchargement de fichiers.

PHP cours tutorial

PHP Upload de fichier


Avec PHP, il est possible de télécharger des fichiers vers le serveur.


Créer un formulaire de téléchargement de fichiers-

Permettre aux utilisateurs de télécharger des fichiers à partir d'un formulaire peut être très utile.

Regardez le formulaire HTML suivant pour télécharger des fichiers:

Sélectionner le code

<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Nom du fichier:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Evoyer" />
</form>

</body>
</html>

 

Regardons ce qui se passe dans le  formulaire HTML ci-dessus:

  • L'attribut enctype de la balise form,  spécifie le type de contenu à utiliser lors de la soumission du formulaire. "Multipart / form-data" est utilisé quand un formulaire qui exige des données binaires, comme le contenu d'un fichier. "Multipart / form-data" est
  • Le type = "file" attribut de la balise <input> spécifie que l'entrée devrait être traité comme un fichier. Par exemple, lorsqu'il est affiché dans un navigateur, il y aura un bouton parcourir à côté du champ de saisie. Quand l'élément INPUT a un type  type="file".La valeur " multipart/form-data" devrait être utilisée

Lorsque l'utilisateur clique sur Envoyer, les données seront affichées sur le serveur et l'utilisateur sera redirigé vers le fichier upload_file.php. Ce fichier PHP va traiter les données du formulaire et faire tout le travail.

Note: Permettre aux utilisateurs de télécharger des fichiers présente un gros risque de sécurité. Alors faites très attention


Créer le script d'upload

Le "upload_file.php" est le fichier qui contient le code pour télécharger un fichier:

Code de « upload_file.php » :

Sélectionner le code

  <?php
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Error: " . $_FILES["file"]["error"] . "<br
  />";
    }
  else
    {
    echo "Fichier à télécharger : " . $_FILES["file"]["name"] .
  "<br />";
      echo "Type : " . $_FILES["file"]["type"] . "<br />";
      echo "Taille : " . ($_FILES["file"]["size"] / 1024) . "
  Kb<br />";
      echo "Stocké dans : " . $_FILES["file"]["tmp_name"];  }
  ?>

 

En utilisant  le tableau $_FILES de PHP vous pouvez télécharger des fichiers depuis un ordinateur client vers le serveur distant.

Les éléments de ce tableau  sont comme suit:

  • $_FILES ["Fichier"] ["nom"] - le nom du fichier uploadé
  • $_FILES ["Fichier"] ["type"] - le type du fichier téléchargé
  • $_FILES ["Fichier"] ["size"] - la taille en octets du fichier téléchargé
  • $_FILES ["Fichier"] ["tmp_name"] - le nom de la copie temporaire du fichier stocké sur le serveur
  • $_FILES ["Fichier"] ["error"] - le code d'erreur résultant de l'upload de fichier

L’exemple précèdent est un moyen très simple de télécharger des fichiers. Mais pour des raisons de sécurité, vous devez ajouter des restrictions sur ce que l'utilisateur peut  télécharger.


Restrictions sur Upload

Dans ce script nous ajoutons certaines restrictions à l'upload de fichier. L'utilisateur peut seulement télécharger des fichiers gif ou jpeg et la taille du fichier doit être de moins de 20 ko..:

Code de « upload_file.php » :

Sélectionner le code

  <?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 "Error: " . $_FILES["file"]["error"] . "<br
  />";
      }
    else
      {
      echo "Upload: " . $_FILES["file"]["name"] . "<br
  />";
      echo "Type: " . $_FILES["file"]["type"] . "<br
  />";
      echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br
  />";
      echo "Stored in: " . $_FILES["file"]["tmp_name"];
      }
    }
  else
    {
    echo "Invalid file";
    }
  ?>

 

Remarque: Pour que IE reconnaît les fichiers jpg le type doit être pjpeg, pour FireFox il doit être  JPEG.


Enregistrer le fichier envoyé

Les exemples ci-dessus créer une copie temporaire des fichiers téléchargés dans le dossier temp de PHP sur le serveur.

Les fichiers temporaires copiés disparaissent lorsque le script se termine. Pour stocker le fichier téléchargé nous avons besoin de le copier vers un autre emplacement:

Code de « upload_file.php » :

Sélectionner le code

  <?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 "Return Code: " . $_FILES["file"]["error"] . "<br
  />";
      }
    else
      {
      echo "Fichier à télécharger : " . $_FILES["file"]["name"] .
  "<br />";
      echo "Type: " . $_FILES["file"]["type"] . "<br />";
      echo "Taille: " . ($_FILES["file"]["size"] / 1024) . "
  Kb<br />";
      echo "Fichier temporaire : " . $_FILES["file"]["tmp_name"] .
  "<br />";
   
      if (file_exists("upload/" . $_FILES["file"]["name"]))
        {
        echo " Le fichier".$_FILES["file"]["name"] . "  existe déjà
  à cette emplacement. ";
        }
      else
        {
        move_uploaded_file($_FILES["file"]["tmp_name"],
        "upload/" . $_FILES["file"]["name"]);
        echo "Enregistré dans : " . "upload/" .
  $_FILES["file"]["name"];
        }
      }
    }
  else
    {
    echo "Chemin invalide !!";
    }
  ?>

 

Le script ci-dessus vérifie si le fichier existe déjà, si non, il copie le fichier vers le dossier spécifié.

Note: Cet exemple enregistre le fichier dans un sous dossier appelé "upload" qui existe dans le même dossier que le fichier «  upload_file.php »


Par carabde 20 Aout 2014