Médiaforma

PHP MySQL – Transmission de fichiers par formulaire

Print Friendly

Pour transmettre un fichier à un script PHP, vous devez mettre en place un formulaire spécial dans lequel l’attribut enctype est initialisé à multipart/form-data :

<form action="ouverture-fichier.php" method="post"
      enctype="multipart/form-data">
</form>

Voici le code complet d’un formulaire qui demande à l’utilisateur de choisir un fichier texte dans les unités de masse de son ordinateur :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Ouverture d'un fichier par formulaire</title>
  </head>
  <body>
    <form action="ouverture-fichier.php" method="post"
          enctype="multipart/form-data">
      Choisissez un fichier texte (extension .txt)<br>
      <input type="file" name = "fichierTexte"><br>
      <input type="submit" value="Envoyer">
    </form>
  </body>
</html>

Dans la balise form, nous spécifions l’attribut enctype et nous l’initialisons à « multipart/form-data ». Ainsi, nous pourrons transmettre un fichier par le formulaire. L’utilisateur peut choisir un fichier dans ses unités de masse grâce à un champ input de type file.

Lorsque le bouton Envoyer est cliqué, le fichier choisi est communiqué au script fichier.php en utilisant la méthode post. Nous allons maintenant nous intéresser au script fichier.php.

Pour télécharger sur le serveur le fichier choisi dans le formulaire, vous utiliserez :

1)      Les informations contenues dans la variable superglobale $_FILES[] dont voici le détail :

Elément du tableau Signification
$_FILES[« fichierTexte »][« name »] Le nom original du fichier, tel qu’il a été défini sur la machine du client web.
$_FILES[« fichierTexte »][« type »] Le type MIME du fichier, si le navigateur a fourni cette information. Par exemple, « image/gif ».
$_FILES[« fichierTexte »][« size »] La taille, en octets, du fichier téléchargé.
$_FILES[« fichierTexte »][« tmp_name »] Le nom temporaire du fichier qui sera chargé sur la machine serveur.
$_FILES[« fichierTexte »][« error »] Le code d’erreur associé au téléchargement de fichier.

 

Dans ce tableau, on suppose que le nom du fichier à télécharger a été saisi dans un champ input de type file nommé fichierTexte.

 

2)      Vous utiliserez également la fonction move_uploaded_file() dont voici le gabarit :

move_uploaded_file(temp, nom);

Où temp est le nom du fichier à télécharger et nom est la destination du fichier téléchargé.

Voici le code utilisé pour sauvegarder le fichier choisi par l’utilisateur sur le serveur :

<?php
  if (isset($_FILES["fichierTexte"])) {
    $tmp_name = $_FILES["fichierTexte"]["tmp_name"];
    $name = $_FILES["fichierTexte"]["name"];
    move_uploaded_file($tmp_name, $name);
  }
?>

Si l’entrée fichierTexte existe dans le tableau superglobal $_FILES, le nom du fichier  et le nom temporaire du fichier sur le serveur sont récupérés en lisant le contenu des cellules name et tmp_name du tableau $_FILES[« fichierTexte »]. Ces valeurs sont stockées dans les variables $name et $tmp_name.

Pour effectuer le transfert du fichier depuis le client sur le serveur, il suffit maintenant d’exécuter la fonction move_uploaded_file en lui transmettant le nom temporaire du fichier et le nom original du fichier.

Pour rendre ce code plus robuste, vous pourriez :

  • tester si aucun code d’erreur n’a été émis concernant le fichier ;
  • vérifier que le fichier spécifié par l’utilisateur est bien un fichier texte ;
  • vérifier que la taille du fichier n’est pas trop imposante.

Voici le code à utiliser pour tenir compte de ces remarques :

<?php
  if (isset($_FILES["fichierTexte"]) AND $_FILES["fichierTexte"]["error"] == 0) {
    if (($_FILES["fichierTexte"]["size"]<10000) AND ($_FILES["fichierTexte"]["type"] == "text/plain")) {
      $tmp_name = $_FILES["fichierTexte"]["tmp_name"];
      $name = $_FILES["fichierTexte"]["name"];
      move_uploaded_file($tmp_name, $name);
    }
    else
      echo "Le fichier spécifié n'est pas un fichier texte ou sa taille dépasse les 10000 octets<br>";
  }
  else
    echo "Une erreur s'est produite pendant le téléchargement. Ressayez...";
  ?>

Si l’entrée fichierTexte existe dans le tableau superglobal $_FILES et si aucune erreur n’a été détectée pour cette entrée, le code peut s’exécuter.

Si la taille du fichier est inférieure à 10000 octets et si le fichier choisi est bien un fichier texte, alors, il peut être transmis au serveur.

Les données le concernant sont lues dans le tableau $_FILES et stockées dans les variables $name et $tmp_name, puis le fichier est uploadé sur le serveur avec la fonction move_uploaded_file.

Exécutons ce code dans WAMP Server. Nous choisissons un fichier texte dans les unités de masse de l’ordinateur et nous cliquons sur le bouton Envoyer. Le fichier est transmis au script fichier.php et le fichier est uploadé sur le serveur.

Vous pouvez vérifier que le fichier choisi dans les unités de masse se trouve maintenant sur le serveur. Reportez-vous à la section sur la gestion de fichiers sur le serveur pour voir comment ouvrir ce fichier et, par exemple, l’afficher dans une zone de texte éditable.

Vous avez aimé cet article ? Partagez-le avec vos réseaux...
 
Comments

No comments yet.

Leave a Reply