PHP (PHP Hypertext Preprocessor)

Auteur: Mohamed CHINY Durée necessaire pour le cours de PHP (PHP Hypertext Preprocessor) Niveau recommandé pour le cours de PHP (PHP Hypertext Preprocessor) Supports vidéo non disponibles pour ce cours Exercices de renforcement disponibles pour ce cours Quiz disponible pour ce cours

Page 19: Les fichiers

Toutes les pages

Manipulation des fichiers en PHP

Quand on parle de fichiers en PHP on sous entend les fichiers texte. Ces fichiers peuvent contenir des données que l'on peut afficher sur une page Web ou peuvent servir d'espace de stockage pour y enregistrer le résultat de l’exécution de nos scripts PHP.

Fonctions agissant sur les fichiers

  • Fonction file_get_contents():

  • La fonction file_get_contents($fichier) permet de retourner une chaîne de caractères constituées du contenu du fichier $fichier passé en paramètre. Autrement dit, le fait de déclarer l’instruction suivante:
    echo file_get_contents("document.txt");
    revient à afficher le contenu du fichier "document.txt" sur le navigateur.

  • Fonction file_put_contents():

  • La fonction file_put_contents($fichier,$contenu) permet d'intégrer le contenu $contenu dans le fichier $fichier. Pour que ce genre d'opérations s’exécute sans problème, il faut vérifier que les droits sur le fichiers le permettent.

    Exemple:
    <?php
       $str="Bonjour à tous";
       file_put_contents("contenu.txt",$str);
    ?>
    Après exécution, on se retrouvera avec le fichier "contenu.txt" qui contient le texte "Bonjour à tous".
    La variable $fichier désigne le chemin du fichier. Il peut être relatif ou absolu. Elle peut même représenter une URL d'un autre domaine (lorsqu'il s'agit seulement de lecture et non pas d'écriture).

    Fonctions de test et d'évaluation de fichiers

    • file_exists($fichier): vérifie si le fichier $fichier existe ou non. S'il existe elle retourne true sinon false.
    • filesize($fichier): retourne la taille du fichier $fichier en octets.
    • filetype($fichier): retourne le type du fichier $fichier.
    • is_executable($fichier): vérifie si le fichier $fichier est exécutable ou non. Il retourne un résultat booléen.
    • is_file($fichier): vérifie si le $fichier est un fichier et non pas un répertoire ou un lien symbolique. Il retourne un résultat booléen.
    • is_link($fichier): vérifie si $fichier est un lien symbolique. Il retourne un résultat booléen.
    • unlink($fichier): détruit le fichier $fichier en le supprimant de son emplacement.
    • copy($src,$dst): copie le fichier $src dans $dst. $src et $dst peuvent être des chemins absolus ou relatifs.
    • rename($old,$new): renomme le fichier $old en $new.

    Exemple:
    <?php
       $fichier="index.php";
       if(is_file($fichier)){
          echo number_format(filesize($fichier),0,""," ")." octets";
       }
    ?>
    Ce code donne:
    7 259 octets

    Fonctions d'accès aux fichiers

    Si les fonctions précédentes permettent d'agit sur le fichier en un seul lot (évaluation ou lecture et écriture du contenu en entier). Les fonctions qui vont suivre quant-à-elles, agissent partiellement sur le fichier, ligne par ligne, voir lettre par lettre. Ce qui permet un meilleur contrôle de celui-ci.

  • Fonction fopen():

  • La fonction fopen($fichier,$mode) permet d'ouvrir le fichier spécifié par la variable $fichier en mode $mode. La fonction fopen() retourne un identifiant d'ouverture qui sera utile pour les fonctions qui vont suivre.

    Les différents modes d'ouvertures possibles sont:

    Mode d'ouvertureSignification
    rLecture seule
    r+Lecture et écriture
    wCréation et écriture seules
    w+Création, lecture et écriture
    aCréation et écriture seules avec ajout du contenu (le pointeur sera placé à la fin du fichier)
    a+Création, lecteure et écriture avec ajout du contenu.

    Les modes w, w+, a et a+ créent le fichier uniquement s'il n'existe pas.

  • Fonction fclose():

  • La fonction fclose($fp) ferme le fichier identifié par $fp. $fp est l'identifiant de l'ouverture du fichier retourné par la fonction fopen().

  • Fonction fgets():

  • La fonction fgets($fp,$nbr) permet de lire un contenu du fichier identifié lors de l'ouverture par $fp. Le contenu qui sera lu commence à la position actuelle du poitneur et a la longueur $nbr caractères. Si par exemple on vient d'ouvrir le fichier en mode r, le pointeur sera automatiquement placé au début. C'est à partir de cette position que la lecture commence.

    Si un retour chariot a été rencontré lors de la lecture, celle-ci cesse immédiatement même si on n'a pas encore atteint les $nbr caractères souhaités.

  • Fonction fgetc():

  • La fonction fgetc($fp) permet de retourner le caractère courant (indexé par le pointeur).

  • Fonction fputs():

  • La fonction fputs($fp,$chaine) permet d'écrire dans le fichier la chaîne de caractère $chaine à partir de la position actuelle du pointeur. S'il y a déjà du contenu à l'endroit où l'on souhaite écrire, alors il sera écrasé lettre par lettre jusqu'à ce que l'écriture de $chaine finisse.

  • Fonction fseek():

  • La fonction fseek($fp,$pos) permet de manipuler la position du pointeur en ramenant celui-ci à la position $pos. Le pointeur avance automatiquement au fur et à mesure qu'on lis ou on écrit, mais la fonction fseek() permet de le placer là où on souhaite.

    Exemple d'application

    Supposons qu'on souhaite créer un compteur de visites le plus simple qui soit. On va opter pour enregistrer le nombre de visites dans un fichier texte au nom de "compteur.txt" (on suppose qu'il est placé dans la racine du site Web avec le document PHP qui le manipulera). Quand on créera le fichier "compteur.txt" on y mettra la valeur 0 (aucune visite n'a encore été enregistrée). Le fait que la page PHP soit demandée par le client l’emmène à incrémenter le contenu du fichier "compteur.txt" de 1.

    Pour éviter les incrémentations abusives, on prévoira de travailler avec des variables de sessions pour estimer si le client a déjà visité la page lors de la session courante ou non.

    Voici le code PHP que je propose:
    <?php
       session_start();
       $fp=fopen("compteur.txt","r+");
       $nbr=fgets($fp,10);
       if($_SESSION["dejaVisitee"]!="oui"){
          $nbr+=1;
          fseek($fp,0);
          fputs($fp,$nbr);
          $_SESSION["dejaVisitee"]="oui";
       }
       echo "Cette page a été visitée $nbr fois.";
    ?>
    N'oubliez pas de créer le fichier "compteur.txt" et l'initialiser par la valeur 0. Vérifiez également que les droits définis dessus permettent au script PHP de le lire et le modifier.