PHP - MANIPULER UN FICHIER

Introduction

Pour sauvegarder un grand nombre de données sur un serveur, on utilise généralement une base de données. Lorsque le nombre de données à sauvegarder reste modeste, on peut se contenter d'un simple fichier texte.

Pour lire le contenu d'un fichier texte placé sur le serveur, il faut veiller à ce que celui-ci soit accessible en lecture. Pour modifier son contenu, il faut aussi le rendre accessible en écriture (chmod 777 fichier.txt).

Lire dans un fichier texte

Lecture complète

La fonction file_get_contents() permet d'afficher le fichier texte au complet.

Exemple de code :

<?php
  $fichier ="dossier/fichier.txt";
  $contenu=file_get_contents($fichier);
  echo $contenu; 
?>

Lecture ligne par ligne

La fonction file() retourne dans un tableau l'intégralité d'un fichier en mettant chacune de ces lignes dans un élément du tableau.

Exemple de code :

<?php
  $fichier ="dossier/fichier.txt";
  $tableau=file($fichier);
  for($i=0; $i<count($tableau); $i++) {
    echo $tableau[$i]."<br>";
  }
?>

Vérification de l'existence du fichier

Il peut être utile de tester si le fichier à visualiser existe ou pas. On utilise la fonction file_exists() pour cela.

Exemple de code :

<?php
  if (file_exists("fichier.txt")) {
    echo "Le fichier existe.";
  }
  else {
    echo "Le fichier est inexistant.";
  }
?>

Editer un fichier

Ouvrir et fermer le fichier

Pour éditer un fichier, on commence par l'ouvrir. Lorsque son contenu sera modifié, il faudra le fermer.

Exemple de code :

<?php
  $monfichier = fopen("fichier.txt","r")
  ...
  fclose($monfichier);
?>

La fonction fopen() comporte deux paramètres :

Lorsque le traitement sur le fichier se termine, on le ferme avec la fonction fclose().

Test de l'ouverture du fichier

Il peut être utile de tester si l'ouverture de fichier s'est bien déroulée, pour stopper le script PHP le cas échéant.

Exemple de code :

<?php
  if (!$monfichier = fopen("fichier.txt","r")) {
    echo "Echec de l'ouverture du fichier";
    exit;
  }
  else {
    ...
    fclose($monfichier);
  }
?>

Lire le contenu d'un fichier

Le fichier comporte une ligne

Un pointeur est utilisé pour désigner un endroit particulier du fichier. A son ouverture en mode lecture seule, le pointeur est situé au tout début du fichier.

La fonction fgets() renvoie la ligne courante sur laquelle se trouve le pointeur. Le deuxième paramètre de la fonction désigne le nombre maximum de caractères à récupérer sur la ligne.

Exemple de code :

<?php
  $monfichier = fopen("fichier.txt","r");
  $ligne = fgets($monfichier,255);
  fclose($monfichier);
  echo 'Contenu du fichier : '.$ligne;
?>

Le fichier comporte plusieurs lignes

Une solution consiste à appeler plusieurs fois la fonction "fgets()" :

<?php
  $monfichier = fopen("fichier.txt","r");
  $ligne1 = fgets($monfichier,255);
  $ligne2 = fgets($monfichier,255);
  fclose($monfichier);
  echo 'Première ligne du fichier : '.$ligne1;
  echo '<br>',
  echo 'Deuxième ligne du fichier : '.$ligne2;
?>

Une bouche permet d'obtenir toutes les lignes du fichier. La fonction "feof()", utilisée dans la boucle "while", teste si la fin du fichier a été atteinte (feof signifie find end of file).

Exemple de code :

<?php
  $monfichier = fopen("fichier.txt","r");
  while(!feof($monfichier)) {
    $ligne = fgets($monfichier,255);
    echo $ligne."<br>";
  }
  fclose($monfichier);
?>

Modifier le contenu d'un fichier

Positionner le curseur

On commence par se préoccuper de la position du curseur dans le fichier. On utilise la fonction fseek() pour cela.

Pour placer le curseur au début du fichier :

fseek($monfichier, 0);

Ecrire dans le fichier

La fonction fputs() permet d'écrire dans un fichier.

Exemple de code :

<?php
  $monfichier = fopen("fichier.txt","a");
  fputs($monfichier, "montexte");
  fclose($monfichier);
?>

Le fichier à modifier peut être ouvert de plusieurs manières :

Exemple : Compteur de visites

L'exemple de code suivant, à adapter selon ce que vous voulez obtenir, permet de réaliser un compteur de visites.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
  </head>
  <body>
    <?php
      $fp = fopen("compteur.txt","r+");
      $nbvisites = fgets($fp,11);
      $nbvisites=$nbvisites+1;
      fseek($fp,0);
      fputs($fp,$nbvisites);
      fclose($fp);
      echo 'Ce site compte '.$nbvisites.' visiteurs.';
    ?>
  </body>
</html>