Apprendre à coder sur pierre-giraud.com

DES COURS COMPLETS ET GRATUITS POUR TOUS

SOMMAIRE

Introduction

  1. Présentation du cours
  2. Introduction au PHP
  3. Mettre en place un env. de travail

Les bases en PHP

  1. Syntaxe de base du PHP
  2. Premières instructions PHP
  3. Introduction aux variables PHP
  4. Types de valeurs et concaténation
  5. Opérations sur les variables
  6. Conditions et opérateurs de comparaison
  7. Les conditions if, if...else et if... elseif... else
  8. Utilisation avancée des conditions
  9. Structures ternaires et switch
  10. Les boucles PHP
  11. Découverte des fonctions
  12. La portée des variables
  13. Les constantes PHP
  14. Les variables tableaux PHP
  15. Tableaux associatifs
  16. Tableaux multidimensionnels
  17. Test n°1

Gestion des dates en PHP

  1. Le timestamp
  2. Obtenir et formater une date
  3. Tester la validité d'une date
  4. Test n°2

Opérations sur les fichiers en PHP

  1. Lire, ouvrir, fermer un fichier
  2. Parcourir et lire un fichier par partie
  3. Créer un fichier et écrire dedans
  4. Ecrire dans un fichier
  5. Les instructions include et require
  6. Test n°3

Les variables superglobales

  1. Découverte des variables superglobales
  2. Les cookies
  3. Les sessions
  4. Test n°4

Les expressions régulières et PHP

  1. Découverte des regex
  2. Les fonctions PHP PCRE
  3. Quantifieurs et options
  4. Classes de caractères
  5. Test n°5

L'orienté objet en PHP

  1. Classes, instances et objets
  2. Propriétés et méthodes
  3. Extension de classe et héritage
  4. Le principe d'encapsulation
  5. La méthode constructeur
  6. L'opérateur de résolution de portée et la surcharge
  7. Constantes, méthodes et propriétés statiques
  8. Les classes et méthodes abstraites
  9. Les interfaces
  10. Les méthodes magiques
  11. Le chainage de méthodes
  12. Test n°6

Notions avancées en POO

  1. Le typage explicite
  2. Les traits
  3. Les closures et les classes anonymes
  4. L'auto-chargement des classes
  5. Le mot clef final
  6. Résolution statique à la volée
  7. Parcourir des objets
  8. Le clonage d'objets
  9. Comparaison d'objets
  10. Test n°7

Filtres, erreurs et exceptions

  1. Introduction aux filtres
  2. Utilisation pratique des filtres
  3. Gérer les erreurs en PHP
  4. Gérer les exceptions en PHP

ECRIRE DANS UN FICHIER CONTENANT DU TEXTE

La problématique de la place du curseur interne

Pour écrire dans un fichier contenant déjà du texte en PHP, il va avant tout falloir vous demander où se trouve votre curseur interne.

Afin de bien comprendre ce qui va suivre, retenez que visuellement le "curseur" est la barre verticale clignotante lorsque vous entrez dans un champ de formulaire par exemple. Ici, on parle de "curseur interne" car on ne voit pas ce curseur : il faut se l'imaginer.

La place du curseur interne correspond à l’emplacement où va commencer l’exécution d’un code.

Par exemple, les fonctions fgets() et fgetc(), qui servent à lire un fichier ligne par ligne ou caractère par caractère déplacent le curseur interne à chaque nouvelle utilisation.

En effet, rappelez vous : la première fois qu’on appelle fgets() par exemple, la première ligne de notre fichier est lue (par défaut). Cependant, lors du deuxième appel à cette fonction, c’est bien la deuxième ligne de notre fichier qui va être lue.

Ce comportement est justement dû au fait que la fonction fgets() déplace le curseur interne.

Lors du premier appel à la fonction, le curseur se situe normalement au début du fichier. La fonction est appelée, la première ligne du fichier est lue et la fonction déplace le curseur interne au début de la deuxième ligne.

Ainsi, lorsque la fonction est appelée une nouvelle fois, c’est la ligne courante du fichier qui est lue, c’est-à-dire celle où se situe le curseur, donc la deuxième ligne.

Vous devez savoir que selon le mode d’ouverture utilisé pour créer notre fichier, le curseur va se situer à un endroit différent dans notre fichier. Cela va évidemment impacter toutes les opérations qui vont pouvoir être faites sur ce fichier par la suite.

Pour cela, il est essentiel de connaître à quel endroit chaque mode va placer notre curseur interne.

Mode utilisé Position du curseur
r / r+ Début du fichier
a / a+ Fin du fichier
w / w+ Début du fichier
x / x+ Début du fichier

Modifier la place du curseur interne

Comme vous pouvez le constater, quelque soit le mode d’ouverture du fichier choisi, le curseur interne pointera soit au début, soit à la fin du fichier.

Pour écrire du texte à un endroit précis dans notre fichier, nous allons donc devoir déplacer le curseur à l’endroit souhaité.

Pour cela, nous allons utiliser la fonction fseek().

Cette fonction va prendre en arguments l’information renvoyée par fopen() ainsi qu’un nombre correspondant à la nouvelle position en Bytes du curseur (position calculée par rapport au début du fichier).

Notez cependant que si vous utilisez les modes a et a+ pour ouvrir votre fichier, utiliser la fonction fseek() ne produira aucun effet et votre curseur pointera toujours en fin de fichier.

Le problème de la réécriture en PHP

Nous savons maintenant précisément comment déplacer notre curseur interne pour ajouter du texte où on le souhaite dans notre fichier en PHP.

Un dernier problème va se poser à nous : celui de la réécriture des fichiers, « l’overwriting » en anglais.

Vous devez en effet savoir que si vous essayez d’insérer du texte au début ou en milieu d’un fichier possédant déjà du texte, le nouveau texte va être écrit par dessus l’ancien.

Regardons un exemple ensemble pour bien comprendre. Voici tout d’abord mon fichier test.txt auquel je souhaite ajouter du texte :

Un fichier déjà écrit en PHP

J’essaie ensuite de rajouter du texte à mon fichier grâce aux fonction fseek() et fwrite() :

Utilisation des fonctions fseek() et fwrite()

Cependant, dès que j’exécute ce code, je me rends compte que le résultat n’est pas celui attendu. En effet, mon texte a remplacé l’ancien texte plutôt que de venir s’ajouter à l’ancien texte.

Le texte a été surchargé dans notre fichier PHP

Cela est le comportement par défaut du PHP. Pour insérer du texte au milieu d’un fichier sans effacer le précédent, il va donc falloir trouver un moyen détourné.

Insérer du texte au milieu d’un fichier

Nous allons devoir procéder de façon méthodique ici et être un peu rusé.

Tout d’abord, nous allons devoir lire notre fichier et récupérer la partie de son contenu qui se situe avant le point d’insertion de notre nouveau contenu. Nous écrirons cette partie de contenu dans un autre fichier temporaire.

Ensuite, nous allons ajouter notre nouveau contenu dans ce fichier temporaire. Comme nous ajoutons les données en fin de fichier, il n’y a pas de problème de réécriture.

Nous n’avons alors ensuite plus qu’à récupérer la deuxième moitié du contenu du fichier d’origine et à l’écrire en fin de notre fichier temporaire.

Finalement, nous allons supprimer l’ancien fichier et renommer notre fichier temporaire avec le même nom que notre ancien fichier.

Illustrons cela avec un exemple (pensez à bien restaurer votre fichier test.txt si vous avez testé les codes précédents en même temps que moi).

On insère du texte au milieu d’un fichier en PHP

Notre texte a bien été inséré au milieu du fichier en PHP

Toutes les explications nécessaires à la bonne compréhension de ce code se trouvent en commentaires.

Notez simplement qu’on utilise la fonction strlen() pour calculer la longueur d’une chaine de caractères, et les fonctions unlink() et rename() pour supprimer et renommer un fichier.

Note : nous commençons ici à rentrer dans des codes PHP assez complexes. Prenez bien votre temps pour les comprendre et n’hésitez pas à revenir dessus par la suite.

Chapitre précédent

Chapitre suivant