Lorsque l'on n'a pas accès à une base de données, il faut utiliser des fichiers pour y stocker des données. En PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. Pour l'instant, nous n'en utiliserons que 2 ou 3.

1ère partie : dans un premier temps, nous allons faire un script simple, qui permet de stocker le nom et l'email d'utilisateurs dans un fichier et de les récupérer à notre guise.

1- La fonction fopen()

La fonction de base est la fonction fopen(). C'est elle qui permet d'ouvrir un fichier, que ce soit pour le lire, le créer, ou y écrire. Sa syntaxe est :

entier fopen(chaine nomdufichier, chaine mode);
Différents modes disponibles
rouverture en lecture seulement
wouverture en écriture seulement (la fonction crée le fichier s'il n'existe pas)
aouverture en écriture seulement avec ajout du contenu à la fin du fichier (la fonction crée le fichier s'il n'existe pas)
r+ouverture en lecture et écriture
w+ouverture en lecture et écriture (la fonction crée le fichier s'il n'existe pas)
a+ouverture en lecture et écriture avec ajout du contenu à la fin du fichier (la fonction crée le fichier s'il n'existe pas)

Exemples :

  1. <?php
  2. $fp = fopen("../fichier.txt","r"); //lecture
  3. $fp = fopen("ftp://phpfrance.com/pub/fichier.txt","w"); //écriture depuis début du fichier
  4. $fp = fopen("http://igalaxie.com/fichier.txt","a"); //écriture depuis fin du fichier
  5. ?>

La fonction fopen permet donc même d'ouvrir des fichiers sur le web. Vous pouvez, par exemple, récupérer le titre d'une page d'un site :

  1. <?php
  2. $fp = fopen("http://www.phpfrance.com","r"); //lecture du fichier
  3. while (!feof($fp)) { //on parcoure toutes les lignes
  4. $page .= fgets($fp, 4096); // lecture du contenu de la ligne
  5. }
  6. $titre = eregi("<title>(.*)</title>",$page,$regs); //on isole le titre
  7. echo $regs[1];
  8. fclose($fp);
  9. ?>

2- Création (ou mise à jour) du fichier

La première chose est de stocker des infos dans le fichier. Il faut donc ouvrir le fichier en écriture en le créant s'il n'existe pas. On a donc le choix entre le mode 'w' et le mode 'a'. On préférera le second puisque le pointeur se trouve en fin de fichier (autrement dit on écrit à la suite de ce qui se trouve dans le fichier).

NB : il est judicieux de tester si l'ouverture de fichier s'est bien déroulée.

  1. <?php
  2. if($fp = fopen("fichier.txt","a")){ /* ouverture du fichier en écriture */
  3. fputs($fp, "\n"); // on va a la ligne
  4. fputs($fp, "$nom|$email"); // on écrit le nom et email dans le fichier
  5. fclose($fp);
  6. }else{ // L'ouverture a échouée
  7. echo "Ouverture du fichier impossible";
  8. exit();
  9. }
  10. ?>

La fonction fputs() permet d'écrire dans le fichier. C'est un alias de fwrite(), c'est à dire que vous pouvez utiliser indifféremment l'une de ces deux fonctions, elles sont identiques.

booléen fputs(entier Etat_du_fichier, chaine Sortie);

3- Lecture du fichier

Vous pouvez lire les infos présentes dans le fichier en ouvrant le fichier lecture.

  1. <?php
  2. if (file_exists($fichier))
  3. $fp = fopen("fichier.txt", "r"); // le fichier existe, on l'ouvre
  4. else{ // le fichier n'existe pas
  5. echo "Fichier introuvable !<br />Importation stoppée.";
  6. exit();
  7. }
  8. while (!feof($fp)){ // On parcours le fichier
  9. $ligne = fgets($fp,4096); // On se déplace d'une ligne
  10. $liste = explode("|",$ligne); // Champs séparés par |, on en fait un tableau
  11. $nom = $liste[0];
  12. $email = $liste[1];
  13. echo "nom: $nom &nbsp;&nbsp;&nbsp; email: $email<br />";
  14. }
  15. fclose($fp); // Fermeture du fichier
  16. ?>

On utilise la commande fgets() pour récupérer les lignes du fichier, une par une. La fonction feof() permet de tester si la fin du fichier n'a pas été atteinte.

chaine fgets(entier Etat_du_fichier, entier Longueur);

4- Conclusion

Essayer l'exemple - Télécharger l'exemple

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">
  4. <head>
  5. <title>Exemple d'utilisation des fichiers en PHP</title>
  6. <link rel="stylesheet" type="text/css" media="all" href="exemples.css" />
  7. </head>
  8. <body>
  9. <h1>Exemple d'utilisation des fichiers en PHP</h1>
  10. <?
  11.  
  12. // nom du fichier
  13. $fichier = '9_fichier.txt';
  14.  
  15. switch ($_POST['action'])
  16. {
  17.  
  18. case "ecrire":
  19. // on formate nos données
  20. // voir le tutorial sur les fonctions, si besoin
  21. // Raison : ne jamais faire confiance à des données transmises par un utilisateur
  22. function formate_machaine($chaine)
  23. {
  24. // on supprime les \n et les |
  25. $chaine = str_replace('\n', '', $chaine);
  26. $chaine = str_replace('|', '', $chaine);
  27. // on supprime les tags html et php
  28. $chaine = strip_tags($chaine);
  29. // on supprime les espaces superflus au début et à la fin
  30. $chaine = trim($chaine);
  31. // on coupe la chaine a 100 caracteres
  32. $chaine = substr($chaine, 0, 100);
  33. // renvoi nouvelle valeur
  34. return $chaine;
  35. }
  36. $nom = formate_machaine($_POST['nom']);
  37. $commentaire = formate_machaine($_POST['commentaire']);
  38. if($nom != '' and $commentaire != '')
  39. {
  40. // on verifie taille du fichier
  41. // si le fichier fait plus de 3Ko on le vide
  42. if(filesize($fichier) > 3000) $mode = 'w'; else $mode = 'a';
  43. $fp = fopen($fichier, $mode); // ouverture du fichier en écriture
  44. fputs($fp, "$nom|$commentaire"); // on écrit le nom et email dans le fichier en les séparant par |
  45. fputs($fp, "\n"); // on va a la ligne
  46. fclose($fp);
  47. echo '<p>Nom et email ajoutés !</p>';
  48. echo '<p><a href="'.$_SERVER['PHP_SELF'].'">Retour</a></p>';
  49. }
  50. else
  51. {
  52. echo '<p>Erreur, veuillez remplir les deux champs !</p>';
  53. echo '<p><a href="'.$_SERVER['PHP_SELF'].'">Retour</a></p>';
  54. }
  55. break;
  56.  
  57. default:
  58. ?>
  59. <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" name="ecriture">
  60. <input type="hidden" name="action" value="ecrire" />
  61. <table summary="Ecriture dans le fichier">
  62. <tr class="titre">
  63. <td colspan="2">Ecriture dans le fichier</td>
  64. </tr>
  65. <tr>
  66. <td>Nom</td>
  67. <td>
  68. <input type="text" name="nom" size="30" maxlength="30" />
  69. </td>
  70. </tr>
  71. <tr>
  72. <td>Petit commentaire</td>
  73. <td>
  74. <input type="text" name="commentaire" size="30" maxlength="100" />
  75. </td>
  76. </tr>
  77. <tr>
  78. <td>&nbsp;</td>
  79. <td>
  80. <input type="submit" name="envoyer" value="Et Hop!" />
  81. </td>
  82. </tr>
  83. </table>
  84. </form>
  85. <table summary="Lecture du fichier">
  86. <tr class="titre">
  87. <td colspan="2">Lecture du fichier</td>
  88. </tr>
  89. <?
  90. if(file_exists($fichier))
  91. {
  92. $fp = fopen($fichier, 'r'); // le fichier existe, on l'ouvre
  93. while (!feof($fp)) // On parcours le fichier
  94. {
  95. $ligne = fgets($fp, 4096); // On se déplace d'une ligne
  96. $liste = explode('|', $ligne); // Champs séparés par |
  97. $nom = htmlentities($liste[0]); // Pour convertir les caractères en équivalent html
  98. $commentaire = htmlentities($liste[1]);
  99. {
  100. $nom = stripslashes($nom); // fera l'objet d'un tutorial
  101. $commentaire = stripslashes($commentaire);
  102. }
  103. if($nom != '' and $commentaire != '')
  104. {
  105. echo '<tr>';
  106. echo '<td>' . $nom . '</td>';
  107. echo '<td>' . $commentaire . '</td>';
  108. echo '</tr>';
  109. }
  110. }
  111. fclose($fp);
  112. }
  113. else{ // le fichier n'existe pas
  114. echo '<p>Fichier introuvable ! Lecture stoppée.</p>';
  115. }
  116. ?>
  117. </table>
  118. <?
  119. break;
  120. }
  121. ?>
  122. </body>
  123. </html>

Cet exemple montre l'utilité des fichiers lorsque vous n'avez pas accès aux bases de données. L'exemple suivant montrera le rôle des fichiers , même si vous n'avez pas accès aux bases de données.