Back

Création, ouverture et fermeture d’un fichier en PHP

Création, ouverture et fermeture d’un fichier en PHP

  1. Objectifs

    • Etre capable de travailler avec les différentes fonctions qui vont nous permettre de créer, lire, éditer, fermer ou encore de verrouiller des fichiers en PHP.
  2. Présentation

    • PHP propose bon nombre de fonction pour la manipulation des fichiers, qui va de son ouverture à l’écriture dans un fichier texte, ou de la lecture d’un fichier texte jusqu’à sa fermeture.
  3. Méthodes de création de fichier avec PHP

    • Il existe plusieurs méthodes pour créer un fichier avec PHP. Voici quelques exemples :
      • La fonction fopen() : cette fonction permet de créer un fichier en spécifiant le nom et le mode d’ouverture (lecture, écriture, etc.). Exemple : $file = fopen("nom_du_fichier.txt", "w");
      • La fonction touch() : cette fonction permet de créer un fichier vide en spécifiant son nom. Exemple : touch("nom_du_fichier.txt");
      • La fonction fwrite() : cette fonction permet de créer un fichier en écrivant des données dans celui-ci après l’avoir ouvert avec la fonction fopen(). Exemple : fwrite($file, "Contenu du fichier");
      • La fonction file_put_contents() : cette fonction permet d’écrire des données dans un fichier existant ou de créer un fichier s’il n’existe pas encore. Exemple : file_put_contents("nom_du_fichier.txt", "Contenu du fichier", FILE_APPEND);
      • Utiliser la fonction touch() pour créer un fichier en php
        • La fonction touch() permet de créer un nouveau fichier en PHP. Elle prend en paramètre le nom et l’emplacement du fichier à créer. Si le fichier existe déjà, la fonction mettra à jour la date de dernière modification du fichier. Cette fonction est utile pour créer des fichiers de log, des fichiers de configuration, des fichiers de sauvegarde, etc.
      • Utiliser la fonction fwrite() pour créer un fichier en php
        • La fonction fwrite() est utilisée pour écrire des données dans un fichier. Elle prend en paramètre le nom du fichier, les données à écrire et la longueur des données., vous pouvez utiliser le code suivant :
          • <?php
                $file = "monfichier.txt"; // nom du fichier à créer
                $text = "Ceci est le contenu du fichier"; // contenu du fichier
                $handle = fopen($file, "w"); // ouvrir le fichier en mode écriture
                fwrite($handle, $text); // écrire le contenu dans le fichier
                fclose($handle); // fermer le fichier
            ?>

          • Notez que le mode “w” utilisé pour ouvrir le fichier signifie qu’il sera écrasé s’il existe déjà. Si vous voulez ajouter du contenu à un fichier existant plutôt que de l’écraser, vous pouvez utiliser le mode “a” (append) pour ouvrir le fichier.
        • Voici un autre exemple de code pour créer un fichier nommé “monfichier.txt” et y écrire les données “Bonjour tout le monde” :
          • <?php
            $nomfichier = "monfichier.txt";
            $donnees = "Bonjour tout le monde";
            $longueur = strlen($donnees);
            
            // ouvre le fichier en mode écriture
            $fichier = fopen($nomfichier, 'w');
            
            // écrit les données dans le fichier
            fwrite($fichier, $donnees, $longueur);
            
            // ferme le fichier
            fclose($fichier);
            
            echo "Le fichier a été créé avec succès.";
            ?>

          • Il est important de noter que si le fichier n’existe pas, il sera créé lors de l’utilisation de la fonction fopen() en mode écriture (ici ‘w‘). Si le fichier existe déjà, tout son contenu sera écrasé lors de l’utilisation de la fonction fwrite(). Il est donc important de faire attention à utiliser la bonne méthode d’ouverture de fichier (lecture ou écriture) selon les besoins de votre script.
        • Utiliser la fonction file_put_contents() pour créer un fichier en php
          • La fonction file_put_contents() en PHP permet de créer ou de mettre à jour un fichier avec des données. Elle prend deux arguments obligatoires : le nom du fichier (y compris le chemin d’accès) et les données à écrire dans le fichier.
          • Il y a un troisième argument optionnel pour les options d’écriture.
          • Voici un exemple d’utilisation de la fonction file_put_contents() pour écrire du texte dans un fichier :
            • $file = 'example.txt';
              $data = 'This is some text to write to the file.';
              file_put_contents($file, $data);

          • Cela écrira le contenu de la variable $data dans le fichier example.txt. Si le fichier n’existe pas, il sera créé. Si le fichier existe déjà, il sera écrasé et remplacé par les nouvelles données.
          • Il est possible d’utiliser le troisième argument pour ajouter des options d’écriture :
            • $file = 'example.txt';
              $data = 'This is some text to write to the file.';
              file_put_contents($file, $data, FILE_APPEND | LOCK_EX);

          • Cela ajoutera les nouvelles données à la fin du fichier existant (FILE_APPEND) et verrouillera le fichier pour éviter les conflits d’écriture simultanée (LOCK_EX)
  4. Méthodes d’ouverture d’un fichier avec PHP

    • Il existe plusieurs méthodes pour ouvrir un fichier avec PHP :
      • La fonction fopen() : cette fonction permet d’ouvrir un fichier en spécifiant le mode d’accès (lecture, écriture, etc.). Exemple : $fichier = fopen("nomdufichier.txt", "r");
      • La fonction file() : cette fonction permet de lire le contenu d’un fichier ligne par ligne. Exemple : $lignes = file("nomdufichier.txt");
      • La fonction fread() : cette fonction permet de lire un certain nombre de caractères d’un fichier ouvert. Exemple : $contenu = fread($fichier, filesize("nomdufichier.txt"));
      • La fonction file_get_contents() : cette fonction permet de lire le contenu d’un fichier en entier. Il est a noter que cette fonction est considérée comme dépréciée Exemple : $contenu = file_get_contents("nomdufichier.txt");
    • Il est important de se rappeler de fermer le fichier une fois qu’il a été ouvert en utilisant la fonction fclose($fichier) pour libérer les ressources système.
    • Utiliser la fonction fopen()
      • La fonction fopen() est utilisée pour ouvrir un fichier dans PHP. Elle prend en paramètre le nom ou le chemin du fichier à ouvrir et le mode d’accès souhaité (lecture, écriture, etc.).
      • La syntaxe de la fonction fopen():

        • resource fopen(string $nom, string mode, [boolean path])
          

      • Les paramètres de la fonction fopen()

        • string $nom
          • La fonction fopen() ouvre le fichier dont le nom est contenu dans la chaine pointée par path et lui associe un flux.
          • Le paramètre string $nom de la fonction fopen() est une chaîne de caractères indiquant le nom du fichier que vous souhaitez utiliser.
        • string mode
          • Le paramètre string mode de la fonction fopen() pointe vers une chaîne commençant par l’une des séquences suivantes (d’autres caractères peuvent suivre la séquence) :
          • Mode Description
            ‘r’ * Ouvre en lecture seule, et place le pointeur de fichier au début du fichier.
            * Le fichier est ouvert en lecture seule, et la lecture commence au début du fichier.
            ‘r+’ * Ouvre en lecture et écriture, et place le pointeur de fichier au début du fichier.
            * Le fichier est ouvert en lecture et en écriture, et ces opérations commencent au début du fichier
            ‘w’ * Ouvre en écriture seule ; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n’existe pas, on tente de le créer.
            * Le fichier est ouvert en écriture seule, et l’écriture commence au début du
            fichier.
            ‘w+’ * Ouvre en lecture et écriture ; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n’existe pas, on tente de le créer.
            * Le fichier est ouvert en lecture et en écriture, et ces opérations commencent au
            début du fichier
            ‘a’ * Ouvre en écriture seule ; place le pointeur de fichier à la fin du fichier. Si le fichier n’existe pas, on tente de le créer.
            * Le fichier est ouvert en écriture seule, et les données sont écrites en fin de fichier, à la suite de celles qui existent déjà ou au début s’il est vide. Si le fichier n’existe pas, il est créé.
            ‘a+’ * Ouvre en lecture et écriture ; place le pointeur de fichier à la fin du fichier. Si le fichier n’existe pas, on tente de le créer.
            ‘x’ * Crée et ouvre le fichier en lecture seule ; place le pointeur de fichier au début du fichier. Si le fichier existe déjà, fopen() va échouer, en retournant FALSE et en générant une erreur de niveau E_WARNING. Si le fichier n’existe pas, fopen() tente de le créer. Ce mode est l’équivalent des options O_EXCL|O_CREAT pour l’appel système open(2) sous-jacent. Cette option est supportée à partir de PHP 4.3.2 et fonctionne uniquement avec des fichiers locaux.
            ‘x+’ * Crée et ouvre le fichier en lecture et écriture ; place le pointeur de fichier au début du fichier. Si le fichier existe déjà, fopen() va échouer, en retournant FALSE et en générant une erreur de niveau E_WARNING. Si le fichier n’existe pas, fopen() tente de le créer. Ce mode est l’équivalent des options O_EXCL|O_CREAT pour l’appel système open(2) sous-jacent. Cette option est supportée à partir de PHP 4.3.2, et fonctionne uniquement avec des fichiers locaux.

            Attention
            Pour les modes “w” et “w+”, si le fichier n’existe pas il est créé automatiquement. S’il existe, son contenu antérieur est effacé. Il faut donc prendre des précautions avant d’utiliser ce mode d’accès.

      • [boolean path]
        • Le troisième paramètre est un booléen.
        • S’il vaut TRUE (ou 1), la recherche du fichier est étendue à tous les sous-répertoires du chemin indiqué dans le premier paramètre.
        • S’il vaut FALSE, la recherche est limitée à l’emplacement indiqué.
    • Exemple d’utilisation de de la fonction fopen():

      • Voici un exemple d’utilisation de la fonction fopen() pour ouvrir un fichier en mode lecture :
        • $file = fopen("example.txt", "r");

      • Si le fichier a été ouvert avec succès, la fonction fopen() retourne un pointeur sur le fichier. Sinon, elle retourne false. Il est donc important de vérifier le résultat de la fonction avant de continuer à utiliser le fichier.
      • Voici un exemple complet d’utilisation de la fonction fopen() pour lire le contenu d’un fichier :
        • $file = fopen("example.txt", "r");
          if ($file) {
              while (!feof($file)) {
                  echo fgets($file);
              }
              fclose($file);
          } else {
              echo "Impossible d'ouvrir le fichier example.txt";
          }
          

      • Dans cet exemple, on ouvre le fichier “example.txt” en mode lecture, on vérifie que l’ouverture s’est bien passée, puis on lit le contenu du fichier ligne par ligne à l’aide de la fonction fgets() jusqu’à la fin du fichier (feof() retourne true lorsque la fin du fichier est atteinte). Enfin, on ferme le fichier à l’aide de la fonction fclose().
    • Utilisez la fonction file() pour lire les fichiers texte ligne par ligne en PHP
      • La fonction file() de PHP permet de lire le contenu d’un fichier ligne par ligne et de le stocker dans un tableau.
        • Syntaxe: file ( string $filename , int $flags = 0 , resource $context = ? ) : array
      • La fonction file() a trois paramètres :
        • $filename est le chemin d’accès au fichier.
        • $flags est un paramètre facultatif qui peut être une ou plusieurs des constantes ci-dessous.
          • FILE_USE_INCLUDE_PATH: Recherchez le fichier dans le chemin d’inclusion.
          • FILE_IGNORE_NEW_LINES: Ignorer la nouvelle ligne à la fin de l’élément de tableau.
          • FILE_SKIP_EMPTY_LINES: Ignorer les lignes vides dans le fichier.
        • $context est une ressource de contexte de flux valide.
      • Exemple d’utilisation :

          • $file_contents = file("fichier.txt");
            foreach ($file_contents as $line) {
                echo $line;
            }

        • Dans cet exemple, le contenu de “fichier.txt” est lu ligne par ligne et stocké dans le tableau $file_contents. Le contenu de chaque ligne est ensuite affiché à l’aide d’une boucle foreach.
        • <?php
              // Chemin du fichier à lire
              $filePath = "chemin/vers/mon/fichier.txt";
              
              // Utilisation de la fonction file() pour lire le contenu du fichier
              $fileContent = file($filePath);
              
              // Boucle pour afficher chaque ligne du contenu du fichier
              foreach($fileContent as $line) {
                  echo $line . "
          "; } ?>

        • Dans cet exemple, la variable $filePath contient le chemin vers le fichier texte que nous voulons lire. La fonction file() est utilisée pour lire le contenu du fichier et le stocker dans la variable $fileContent, qui est ensuite utilisée pour afficher chaque ligne du fichier en utilisant une boucle foreach.
        • Il est important de noter que la fonction file() renvoie un tableau contenant chaque ligne du fichier, donc il est nécessaire de parcourir chaque élément du tableau pour afficher tout le contenu du fichier.
  5. Méthodes de fermeture d’un fichier en php

    • Il y a plusieurs façons de fermer un fichier en PHP:
      • La fonction fclose(): Cette fonction prend en paramètre un pointeur de fichier obtenu en utilisant une des fonctions d’ouverture (comme fopen()) et ferme le fichier associé à ce pointeur.
      • La fonction feof(): Cette fonction prend en paramètre un pointeur de fichier et renvoie TRUE si le pointeur de fichier se trouve à la fin du fichier. Ce qui permet de fermer le fichier après que toutes les opérations nécessaires ont été effectuées.
      • La fonction unset() : Cette fonction permet de fermer un fichier en détruisant la variable qui contient le pointeur de fichier. Exemple : unset($fichier);
      • La fonction fwrite() : Si vous utilisez la fonction fwrite() pour écrire dans un fichier, vous pouvez spécifier l’option “F” pour fermer automatiquement le fichier après l’écriture. Exemple : fwrite($fichier, "contenu", "F");
    • Utiliser la fonction fclose() pour fermer un fichier
      • Après avoir ouvert un fichier pour y effectuer des opérations de lecture ou d’écriture, il vous faut le fermer pour éviter tous autres opérations sur ce ficher.
      • Pour fermer un fichier utiliser la fonction fclose(), qui nécessite un paramètre.
      • La syntaxe de la fonction fclose():
      • boolean fclose($id_file)
        

      • Le paramètre de la fonction fclose()
        • $id_file

          • Le paramètre $id_file retourné par la fonction fopen().
          • Cette fonction retourne la valeur booléenne TRUE si l’opération de fermeture s’est bien effectuée, et FALSE dans le cas contraire.
    • Utiliser la fonction feof()
      • La fonction feof() vérifie si le pointeur de fichier est à la fin du fichier. Tant que ce n’est pas le cas, la boucle while continue à lire les lignes du fichier et à les afficher. Une fois que le pointeur de fichier atteint la fin du fichier, la boucle se termine et la fonction fclose() est utilisée pour fermer le fichier.
  6. Verrouillage du fichier

    • Si plusieurs utilisateurs accèdent au même fichier à partir du même script ou de deux scripts différents et y effectuent simultanément des opérations de lecture ou d’écriture, le fichier risque de devenir inutilisable pour chacun d’eux.
    • Pour remédier à ce problème, il est essentiel, avant d’écrire ou de lire un fichier, que les scripts qui y accèdent définissent une priorité d’accès au premier script effectuant une opération de verrouillage sur le fichier.
    • Pour verrouiller un fichier utiliser la fonction flock(), qui nécessite un paramètre.
    • La fonction flock() permet de réaliser un système simple de verrous écriture/lecture, qui peut être utilisé sur n’importe quelle plate-forme (Unix et Windows compris).
    • La syntaxe de la fonction flock():
    • boolean flock(resource $id_file,int N)
      

    • Les paramètres de la fonction flock()
      1. $id_file
      2. int N
        • Ce paramètre est une constante entière nommée qui définit le mode de verrouillage du fichier :
          • flock($id_file,LOCK_SH) bloque l’écriture dans le fichier mais laisse le libre accès en lecture à tous les utilisateurs. La constante LOCK_SH a la valeur 1.
          • flock($id_file,LOCK_EX) bloque l’écriture et la lecture du fichier par un autre script.
            Le script en cours a donc l’exclusivité. Une tentative d’accès simultané retourne la valeur FALSE. La constante LOCK_EX a la valeur 2.
          • flock($id_file,LOCK_UN) libère le verrou installé précédemment. Vous ne devez surtout pas oublier d’effectuer cette action après les opérations réalisées sur le fichier, faute de quoi le blocage subsiste. La constante LOCK_UN a la valeur 3.
  7. Applications

    • App-01
      • Soit l’exemple de code suivant qui permet de lire un fichier texte avec PHP :
      • <?php
            // Chemin du fichier à lire
            $filePath = "chemin/vers/mon/fichier.txt";
            
            // Utilisation de la fonction file() pour lire le contenu du fichier
            $fileContent = file($filePath);
            
            // Boucle pour afficher chaque ligne du contenu du fichier
            foreach($fileContent as $line) {
                echo $line . "
        "; } ?>

      • Créer le fichier “fichier.txt” et le remplir avec quelques ligne
      • Afficher le contenu de ce fichier dans un textArea
        • Solution

          <form method="post">
              <textarea name="content" rows="10" cols="30">
                  <?php
                      if(isset($_POST['submit'])) {
                          $file = fopen("file.txt", "r") or die("Impossible d'ouvrir le fichier!");
                          echo fread($file, filesize("file.txt"));
                          fclose($file);
                      }
                  ?>
              </textarea>
              <input type="submit" name="submit" value="Read File">
          </form>

        • Ce script utilise la fonction fopen() pour ouvrir le fichier, la fonction fread() pour lire le contenu du fichier et la fonction fclose() pour fermer le fichier une fois que la lecture est terminée. La variable $_POST['submit'] est utilisée pour vérifier si le bouton “Read File” a été cliqué pour que la lecture du fichier ne se produise que lorsque le bouton est cliqué.
      • Réaliser un script Php qui utilise la fonction file_put_contents() pour écrire le contenu d’un textarea dans un fichier text.
        • Solution

          <form method="post">
              <textarea name="content" rows="10" cols="30"></textarea>
              <input type="submit" name="submit" value="Read File">
              <input type="submit" name="save" value="Save File">
          </form>
          <?php
          if(isset($_POST['save'])) {
              $file = 'file.txt';
              $content = $_POST['content'];
              file_put_contents($file, $content);
          }?>

        • Ce script utilise la fonction file_put_contents() pour écrire le contenu du textarea dans un fichier. La variable $_POST['content'] contient le contenu saisi dans le textarea et est utilisée pour écrire le fichier.
    • App-02
      • Écrire un script php qui produit le comptage des visites.
      • Le comptage des visites sera enregistré dans un fichier compteur_visites.txt.
      • Le programme sera déclenché à l’arrivé du visiteur sur la page d’accueil du site.
      • Le comptage est déclenché sans que le visiteur en ait conscience.
      • Créer une page web permettant de consulter le résultat du genre “nombre visites”.
        • Solution

          <?php
          // Ouvrir ou créer le fichier compteur_visites.txt
          $compteur_visites = fopen("compteur_visites.txt", "a+");
          
          // Lire le contenu actuel du fichier
          $nombre_visites = fread($compteur_visites, filesize("compteur_visites.txt"));
          
          // Incrémenter le compteur de visites
          $nombre_visites++;
          
          // Écrire le nouveau nombre de visites dans le fichier
          fwrite($compteur_visites, $nombre_visites);
          
          // Fermer le fichier
          fclose($compteur_visites);
          
          // Afficher le nombre de visites sur la page d'accueil
          echo "Nombre de visites : " . $nombre_visites;
          ?>

        • Ce script ouvre le fichier “compteur_visites.txt” (ou le crée s’il n’existe pas), lit son contenu, incrémente le compteur de visites, écrit le nouveau nombre de visites dans le fichier et ferme le fichier. Il affiche également le nombre de visites sur la page d’accueil.
        • Pour créer une page web qui affiche uniquement le nombre de visites, vous pouvez utiliser le même script sans l’instruction echo.
        • <?php
          // Ouvrir ou créer le fichier compteur_visites.txt
          $compteur_visites = fopen("compteur_visites.txt", "a+");
          
          // Lire le contenu actuel du fichier
          $nombre_visites = fread($compteur_visites, filesize("compteur_visites.txt"));
          
          // Incrémenter le compteur de visites
          $nombre_visites++;
          
          // Écrire le nouveau nombre de visites dans le fichier
          fwrite($compteur_visites, $nombre_visites);
          
          // Fermer le fichier
          fclose($compteur_visites);
          
          // Afficher le nombre de visites sur la page de consultation
          echo "Nombre de visites : " . $nombre_visites;
          ?>

          –>

        • Et pour inclure ce script sur la page d’accueil, vous pouvez utiliser la fonction “include” ou “require” de PHP.
        • <?php require 'compteur.php';>

        • Notez que cet exemple est très simple et peut facilement être contourné par des utilisateurs malveillants. Il est donc conseillé d’utiliser des méthodes plus robustes pour compter les visites

  • Références:
    • https://www.php.net
    • Livre PHP7 Cours et exercices Jean Engels 2e édition
    • Technologies de l’Information et de la Communication 4 année secondaire



Riadh HAJJI

Abonnez vous à notre chaîne YouTube gratuitement