Médiaforma

All posts tagged fichier

Vous pouvez lire les données caractère par caractère avec la fonction fgetc() ou ligne par ligne avec la fonction fgets() :

$car = fgetc("handle");
$ligne = fgets("handle);

Si le fichier contient plusieurs caractères et/ou lignes, vous devrez utiliser une boucle pour parcourir les données. La fonction feof($handle) retourne la valeur false si la fin du fichier n’est pas atteinte et la valeur true dans le cas contraire.


Comme dans tous les langages, vous devez ouvrir un fichier pour pouvoir lire son contenu ou y stocker des données. Pour cela, vous utiliserez la fonction fopen() :

$handle = fopen(nom, mode);

Où :

  • handle est une variable qui représentera le fichier lorsque vous voudrez lire son contenu ou y écrire des données ;
  • nom est le nom du fichier ;
  • mode est le mode d’accès au fichier. Les modes autorisés sont les suivants :
    • r : lecture seule
    • r+ : lecture et écriture. Si le fichier n’existe pas, il est créé.
    • a : écriture seule. Si le fichier n’existe pas, il est créé.
    • a+ : lecture et écriture. Si le fichier n’existe pas, il est créé. S’il existe, les nouvelles données seront ajoutées après la dernière donnée existante.

Lorsque les manipulations sur le fichier sont terminées, vous devez le fermer avec la fonction fclose() :

fclose($handle);

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.


En ajoutant un deuxième paramètre à la méthode load(), il est possible de limiter le chargement de données en utilisant un sélecteur jQuery :

load('URL sélecteur', function() {
  //une ou plusieurs instructions exécutées après le chargement des données
});
URL est l'URL de l'élément à charger et sélecteur est un sélecteur jQuery sans le signe $ et sans les parenthèses.

 

Exercice

En partant du code de l’exemple précédent (load.htm), insérer trois boutons dans le corps du document et associez-leur un gestionnaire d’événement qui charge les parties #p1, #p2 et #p3 de ce document (texte2.htm) :

<!DOCTYPE html>
<html>
  <head>
    <title>Texte</title>
  </head>
  <body>
    <p id="p1">
    <font size="3"><i>Lorem <b>ipsum</b> dolor sit amet, consectetur adipiscing elit. Sed non
    risus. Lectus tortor, dignissim sit amet, adipiscing nec,
    ultricies sed, dolor. Cras elementum ultrices diam. Maecenas
    ligula massa, varius a, semper congue, euismod non, mi. Proin
    porttitor, orci nec nonummy molestie, enim est eleifend mi, non
    fermentum diam nisl sit amet erat. Duis semper.</i></font>
    </p>

    <p id="p2">
    Sed ut perspiciatis unde omnis iste natus error sit voluptatem
    accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
    quae ab illo inventore veritatis et quasi architecto beatae vitae
    dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas
    sit aspernatur aut odit aut fugit, sed quia consequuntur magni
    dolores eos qui ratione voluptatem sequi nesciunt.
    </p>

    <p id="p3">
    Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet,
    consectetur, adipisci velit, sed quia non numquam eius modi tempora
    incidunt ut labore et dolore magnam aliquam quaerat voluptatem.
    Ut enim ad minima veniam, quis nostrum exercitationem ullam
    corporis suscipit laboriosam, nisi ut aliquid ex ea commodi
    consequatur? Quis autem vel eum iure reprehenderit qui in ea
    voluptate velit esse quam nihil molestiae consequatur, vel
    illum qui dolorem eum fugiat quo voluptas nulla pariatur?
    </p>
  </body>
</html>

 

Solution

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Chargement AJAX avec load()</title>
    <style>
      #zone {
        width: 300px;
        height: 315px;
        border-style: solid;
        border-width: 3px;
        border-color: black;
      }
    </style>
  </head>
  <body>
    <script src="jquery.js"></script>
    <button id="charge-texte1">Charger le texte #p1</button>
    <button id="charge-texte2">Charger le texte #p2</button>
    <button id="charge-texte3">Charger le texte #p3</button>
    <div id="zone"></div>
    <script>
      $(function() {
        $('#charge-texte1').on('click', function(){
          $('#zone').load('texte2.htm #p1');
        });
        $('#charge-texte2').on('click', function(){
          $('#zone').load('texte2.htm #p2');
        });
        $('#charge-texte3').on('click', function(){
          $('#zone').load('texte2.htm #p3');
        });
      });
    </script>
  </body>
</html>

Pour mettre à jour un élément sur une page Web en utilisant des données stockées sur le serveur, le plus simple consiste à utiliser la méthode jQuery load() :

load('URL de l'élément', function() {

//une ou plusieurs instructions exécutées après le chargement des données

});

 

La fonction callback est facultative. Si elle est présente, les instructions qui la composent seront exécutées lorsque le fichier aura été entièrement rapatrié par la méthode load().

A titre d’exemple, ce document (load.htm) contient deux boutons et un élément div. Le premier bouton va être utilisé pour afficher un texte dans l’élément div et le deuxième pour afficher une image dans ce même élément :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Chargement AJAX avec load()</title>
    <style>
      #zone {
        width: 300px;
        height: 315px;
        border-style: solid;
        border-width: 3px;
        border-color: black;
      }
    </style>
  </head>
  <body>
    <script src="jquery.js"></script>
    <button id="charge-texte">Charger le texte</button>
    <button id="charge-image">Charger l'image</button><br/><br/>
    <div id="zone"></div>
    <script>
      $(function() {
        $('#charge-texte').on('click', function(){
          $('#zone').load('texte.htm');
        });
        $('#charge-image').on('click', function(){
          $('#zone').load('image.htm');
        });
      });
    </script>
  </body>
</html>

 

Dans cet exemple, aucune fonction callback n’étant spécifiée dans les paramètres de la méthode load(), cette dernière se contente de charger les fichiers HTML correspondants et de les afficher dans l’élément div.

Voici le code du fichier texte.htm :

<!DOCTYPE html>
<html>
  <head>
    <title>Texte</title>
  </head>
  <body>
    <p>
    <font size="3"><i>Lorem <b>ipsum</b> dolor sit amet, consectetur adipiscing elit. Sed non
    risus. Lectus tortor, dignissim sit amet, adipiscing nec,
    ultricies sed, dolor. Cras elementum ultrices diam. Maecenas
    ligula massa, varius a, semper congue, euismod non, mi. Proin
    porttitor, orci nec nonummy molestie, enim est eleifend mi, non
    fermentum diam nisl sit amet erat. Duis semper.</i></font>
    </p>
  </body>
</html>

Et voici le code du fichier image.htm :

<!DOCTYPE html>
<html>
  <head>
    <title>Image</title>
    <style type="text/css">
      p { text-align: center;}
    </style>
  </head>
  <body>
    <p><img src="chat.jpg"></p>
  </body>
</html>

Tous les liens hypertextes ne pointent pas vers des pages Web. Certains font référence à des fichiers auto-extractibles ou compressés. Lorsque vous cliquez sur un tel lien, un message s’affiche dans la partie inférieure de l’écran. Ici, par exemple, le fichier que nous sommes sur le point de télécharger installera le gestionnaire de fichiers Total Commander.

Cliquez sur Exécuter pour confirmer que vous souhaitez exécuter le fichier. Lorsque le fichier est complètement téléchargé une analyse de sécurité est effectuée. Cliquez sur Exécuter pour installer le programme.


 


Il peut parfois être intéressant de changer la date de création ou de dernière modification d’un fichier, d’un ensemble de fichiers, d’un dossier ou d’un ensemble de dossiers. Par exemple pour uniformiser la date de tous les fichiers relatifs à un projet qui a été finalisé. Read more