Manipuler des fichiers en PHP

Manipuler des fichiers en PHP

  1. Objectifs

    • Utiliser php pour lire et écrire dans les fichiers locaux et à distants
  2. Présentation

    • L’API de manipulation de fichiers de PHP est extrêmement flexible : elle vous permet de lire des fichiers dans une chaîne ou dans un tableau, à partir du système de fichiers local ou d’une URL distante, par lignes, octets ou caractères.
  3. Le type d’accès au fichier en PHP

    • Mode d’ouverture Description
      r Ouvre un fichier en lecture seule. Il est impossible de modifier le fichier.
      r+ Ouvre un fichier en lecture et en écriture.
      a Ouvre un fichier en écriture seule en conservant les données existantes. Si le fichier n’existe pas, le PHP tente de le créer.
      a+ Ouvre un fichier en lecture et en écriture en conservant les données existantes. Si le fichier n’existe pas, le PHP tente de le créer.
      w Ouvre un fichier en écriture seule. Si le fichier existe, les informations existantes seront supprimées. S’il n’existe pas, crée un fichier.
      w+ Ouvre un fichier en lecture et en écriture. Si le fichier existe, les informations existantes seront supprimées. S’il n’existe pas, crée un fichier.
      x Crée un nouveau fichier accessible en écriture seulement. Retourne false et une erreur si le fichier existe déjà.
      x+ Crée un nouveau fichier accessible en lecture et en écriture. Retourne false et une erreur si le fichier existe déjà.
      c Ouvre un fichier pour écriture seulement. Si le fichier n’existe pas, il sera crée. Si il existe, les informations seront conservées.
      c+ Ouvre un fichier pour lecture et écriture. Si le fichier n’existe pas, il sera crée. Si il existe, les informations seront conservées.
      e Le mode e est particulier et n’est pas toujours disponible. Nous n’en parlerons pas ici.



  4. Lecture de fichiers en Php

    1. Lecture de fichiers locaux
      1. Utiliser la fonction file_get_contents()
        • Le moyen le plus simple de lire le contenu d’un fichier disque en PHP est d’utiliser fonction file_get_contents().
        • Cette fonction accepte le nom et le chemin d’accès à un fichier disque et lit le fichier entier dans une variable de chaîne d’un seul coup. Voici un exemple :
        • <?php
          // read file into string
          $str = file_get_contents('example.txt') or die('ERROR: Cannot find file');
          echo $str;
          ?>
          
      2. Utiliser la fonction file()
        • Une autre méthode de lecture des données d’un fichier est la fonction file() de PHP, qui accepte le nom et le chemin d’accès à un fichier et lit le fichier entier dans un tableau, avec chaque élément du tableau représentant une ligne du fichier.
        • Pour traiter le fichier, il vous suffit d’itérer sur le tableau à l’aide d’une boucle foreach.
        • Voici un exemple, qui lit un fichier dans un tableau, puis l’affiche à l’aide d’une telle boucle :
        • <?php
          // read file into array
          $arr = file('example.txt') or die('ERROR: Cannot find file');
          foreach ($arr as $line) {
           echo $line;
          }
          ?>
          
      3. Utiliser la fonction fread()
        • Le fonction fread() lit à partir d’un fichier ouvert.
        • La fonction s’arrêtera à la fin du fichier ou lorsqu’il atteint la longueur spécifiée, selon la première éventualité.
        • Syntaxe
          • fread(file, length)
        • Valeurs des paramètres
          • Parameter Description
            file Obligatoire. Spécifie le fichier ouvert à lire
            length Obligatoire. Spécifie le nombre maximum d’octets à lire
        • Exemple
          • <?php
            $file = fopen("test.txt","r");
            echo fread($file,filesize("test.txt"));
            fclose($file);
            ?>
            
    2. Lecture de fichiers distants
      1. Utiliser la fonction file_get_contents() ou file()
        • Les deux fonctions vues précédemment file_get_contents() et file(), prennent également en charge la lecture de données à partir d’URL, en utilisant soit le protocole HTTP ou FTP.
        • Voici un exemple, qui lit un fichier HTML sur le Web dans un tableau :
          <?php
          // read file into array
          $arr = file('http://www.google.com') or die('ERROR: Cannot find file');
          foreach ($arr as $line) {
           echo $line;
          }
          ?>
      2. Utiliser la fonction fgets()
        • En cas de liaisons réseau lentes, il est parfois plus efficace de lire un fichier distant dans “morceaux” pour maximiser l’efficacité de la bande passante réseau disponible.
        • Pour ce faire, utilisez le fgets() pour lire un nombre spécifique d’octets à partir d’un fichier.
        • La fonction fgets() renvoie une ligne d’un fichier ouvert.
        • Exemple
          • <?php
            // Lire le fichier dans un tableau (morceaux)
            $str = '';$fp = fopen('https://www.apcpedagogie.com', 'r') or die('ERROR: Ne peut pas ouvrir le fichier');
            while (!feof($fp)) {
             $str .= fgets($fp,512);
            }
            fclose($fp);
            echo $str;
            ?>
            
        • Description
          • Cette exemple introduit quatre nouvelles fonctions, alors examinons-la de plus près.
          • Premièrement les fonction fopen() : elle accepte le nom du fichier source et un argument indiquant si le fichier doit être ouvert en lecture (‘r‘), en écriture (‘w‘) ou en ajout (‘a‘), puis crée un pointeur vers le fichier.
          • Ensuite, une boucle while appelle la fonction fgets() en boucle pour lire un nombre spécifique d’octets du fichier et ajoute les octets à une variable de chaîne ; cette boucle continue jusqu’à ce que la fonction feof() renvoie true, indiquant que la fin du fichier est atteinte.
          • Une fois la boucle terminée, la fonction fclose() détruit le pointeur de fichier.
        • Afin de lire les URL distantes, la variable de configuration PHP ‘allow_url_fopen‘ doit être défini sur true dans le fichier de configuration PHP php.ini.
        • Si cette variable est définie sur false, tous les tentatives de lecture de fichiers distants échoueront.
  5. Écriture de fichiers

    1. Utiliser la fonction file_put_contents()
      • La fonction file_put_contents(), est un proche cousin de la fonction file_get_contents() que vous avez lu dans le section précédente : cette fonction accepte un nom de fichier et un chemin, ainsi que les données à écrit dans le fichier, puis écrit ce dernier dans le premier.
      • Syntaxe
        • file_put_contents(filename, data, mode, context)
      • Valeurs des paramètres
        • Paramètre Description
          filename Obligatoire. Spécifie le chemin d’accès au fichier dans lequel écrire. Si le fichier n’existe pas, cette fonction en créera un
          data Obligatoire. Les données à écrire dans le fichier. Peut être une chaîne, un tableau ou un flux de données
          mode Optionnel. Spécifie comment ouvrir/écrire dans le fichier. Valeurs possibles:

          • FILE_USE_INCLUDE_PATH – rechercher le nom de fichier dans le répertoire d’inclusion
          • FILE_APPEND – si le fichier existe déjà, ajoutez-y les données – au lieu de l’écraser
          • LOCK_EX – Mettre un verrou exclusif sur le fichier lors de l’écriture de celui-ci
          context Optional. Specifies the context of the file handle. Context is a set of options that can modify the behavior of a stream.
    2. Utiliser la fonction fwrite()
      • Une autre façon d’écrire des données dans un fichier est de créer un pointeur de fichier avec fopen(), et puis écrivez les données dans le pointeur à l’aide de la fonction PHP fwrite().
      • <?php
         $newfile = fopen("textfile.txt", "w");
         $str = "random text";
         fwrite($newfile, $str);
         fclose($newfile);
        ?>
        
      • Un nouveau fichier peut être écrit ou du texte peut être ajouté à un fichier existant à l’aide de la fonction PHP fwrite() .
      • Cette fonction requiert deux arguments spécifiant un pointeur de fichier et la chaîne de données à écrire. En option, un troisième argument entier peut être inclus pour spécifier la longueur des données à écrire. Si le troisième argument est inclus, l’écriture s’arrêtera une fois la longueur spécifiée atteinte.