Créez votre site avec honolulu...
Apprendre le html
Cours de javascript
Apprendre les CSS

Apprendre le PHP : les opérations sur les fichiers  






On dit de Javascript que c'est un langage client car il n'est pas compilé mais directement exécuté par le navigateur. En outre, un langage client ne peut agir que sur le client, ie le navigateur, du moins sur l'instance, l'objet du navigateur. (A chaque fois que vous ouvrez IE ou un autre navigateur, vous créez un nouvel objet : on dit aussi que c'est une nouvelle instance de l'objet).

PHP ou d'autres langages serveur comme (ASP, JSP etc) est un langage serveur car il est compilé puis interprété par le navigateur. PHP génère du code HTML mais vous ne pouvez en voir la source véritable : en affichant le code-source contenu dans le navigateur, vous ne verrez que du HTML (généré au préalable par PHP). Peut-être que l'on dit aussi langage-serveur parce que PHP comme les autres langages de programmation peut agir non seulement sur le navigateur (en générant du Javascript) mais aussi en agissant sur le serveur même.

Ainsi, avec PHP, vous pouvez créer, modifier, voire supprimer des fichiers ou des données directement sur le serveur...

NB : pour ne pas encombrer ce tutorial d'informations superflues, seules celles vraiment nécessaires seront abordées.

Enregistrer des données dans un fichier texte

Pour écrire des données dans un fichier-texte, le code suivant est suffisant :

<HTML><body>
<?php
/* si register_globals off (à partir de PHP 4.3)
$commentaire = $_POST['commentaire']; 
*/
// en supposant que le fichier "texte.txt"
 existe au préalable

if ($commentaire!="")
	{
	/* Ecriture avec ouverture de fichier en mode a+*/
/* mode a+ 
pour écrire à la suite des caractères 
déjà présents dans le fichier 
*/
/* mode w+ 
pour effacer les données présentes 
et écrire dans le fichier.
Si ce fichier n'existe pas il est créé.
*/

$ouvre=fopen("texte.txt","a+"); // ouverture en lecture ( a+)
fwrite($ouvre,$commentaire);    // écriture fichier
fclose($ouvre);			// fermeture fichier
	}
?>
<form action="<?$PHP_SELF;?>" method="post">
<textarea name="commentaire"></textarea>
<input type="submit" value="Ecrire">
</form></body></HTML>

Ce code permet d'insérer dans le fichier "texte.txt" les données saisies dans le textarea.
Notez cependant que ces données sont insérées à la suite des données qui pourraient être déjà stockées dans le fichier.

Si vous tapez "ma première donnée", le fichier texte le stockera ainsi :

Si vous tapez ensuite "ma deuxième donnée", votre texte sera ainsi enregistré :



On va continuer avec "ma troisième donnée" :

Vous comprenez donc que les données sont mises à la suite des unes les autres certes, mais aussi qu'elles ne sont pas séparées. Comment distinguer la donnée A de la donnée B ? En utilisant un séparateur, un signe distinctif pour "séparer" les différentes informations.

Ce peut être n'importe quel signe, pourvu que vous puissiez le distinguer du texte : "*","£","<br>"...

Pour que les données intègrent le signe séparateur, il faut ajouter dans le code plus haut, la ligne suivante avant d'écrire dans le fichier :

$commentaire.="*"; 
Ce qui va donner pour la première donnée :



Pour la deuxième donnée



Et pour la troisième :



Afficher des données issues d'un fichier texte

Maintenant que nous avons notre séparateur, nous allons pouvoir dissocier les informations en nous basant sur ce signe même. En programmation, cela s'appelle "parser" un fichier. Ca veut dire quoi ? Tout simplement, nous allons ligne notre fichier texte et à chaque fois que nous rencontrerons notre signe séparateur, nous saurons que nous avons affaire à une nouvelle donnée distincte de la précedente et aussi de la suivante...

Pour lire le fichier, le code suivant sera nécessaire :

<HTML><body>
<?php
$ouvre=fopen("texte.txt","r"); // ouverture fichier en lecture "r"
while (!feof ($ouvre))         // tant que pas en fin de fichier
	{
$tampon = fgets($ouvre, 4096); // mise en tampon des données
echo $tampon;		       // affichage du tampon
  	}
fclose($ouvre);		       // fermeture fichier
?>
</body></HTML>
Ce qui va donner à l'affichage :

C'est bien, mais ici les données sont affichées telles quelles, en vrac.
De plus, le séparateur ne doit pas être affiché avec les données ! On peut faire mieux :

<HTML><body>
<?php
$ouvre=fopen("texte.txt","r");  // ouverture du fichier
while (!feof ($ouvre))          // tant que pas en fin de fichier
	{

$lecture = fgets($ouvre, 4096); // stockage dans $lecture
$donnee=explode("*",$lecture);  // parsing des données basé sur "*")

$combien=count($donnee)-1; // nbre d'éléments séparés par "*"
echo "<b>Ce fichier contient ",$combien," données : </b><br><br>";

for ($i=0;$i<=$combien;$i++)
	{
echo $donnee[$i],"<br>";  // affichage des données
	}

	}
fclose($ouvre);		// fermeture
?>
</body></HTML>

Le résultat est cette fois plus convaincant :



Modifier les données d'un fichier texte

Pour modifier les données d'un fichier texte, il suffit d'ouvrir le fichier en lecture, d'analyser chaque ligne et si la ligne correspond au motif ("pattern") recherché, alors on modifie cette ligne. Il faut ensuite ouvrir ce même fichier en écriture en mode w+ pour écraser les données et les remplacer en écriture. Le code est le suivant :

<HTML><body>
<?php
$ouvre=fopen("texte.txt","r");  // ouverture du fichier
while (!feof ($ouvre))          // tant que pas en fin de fichier
	{

$lecture = fgets($ouvre, 4096); // stockage dans $lecture
$donnee=explode("*",$lecture);  // parsing des données basé sur "*")

$combien=count($donnee)-1; // nbre d'éléments séparés par "*"
echo "<b>Ce fichier contient ",$combien," données : </b><br><br>";

for ($i=0;$i<$combien;$i++)
	{
// modification des données
// on modifie "deuxième" en "2°"
if (ereg("deuxième",$donnee[$i])){$donnee[$i]=str_replace("deuxième","2°",$donnee[$i]);}
// stockage temporaire des données toujours avec le séparateur
$liste_modif.=$donnee[$i]."*";
	}

	}
fclose($ouvre);		// fermeture

$ouvre=fopen("texte.txt","w+");
fwrite($ouvre,$liste_modif);
fclose($ouvre);
?>
</body></HTML>

Le résultat à la lecture sera le suivant :

modification de fichier texte

Supprimer les données d'un fichier texte

Pour supprimer les données d'un fichier texte, il suffit là-aussi d'ouvrir le fichier en lecture, d'analyser chaque ligne et si la ligne correspond au motif ("pattern") recherché, alors on supprime cette ligne. Il faut ensuite ouvrir ce même fichier en écriture en mode w+ pour écraser les données et les remplacer en écriture. Le code est similaire à celui du dessus :

<HTML><body>
<?php
$ouvre=fopen("texte.txt","r");  // ouverture du fichier
while (!feof ($ouvre))          // tant que pas en fin de fichier
	{

$lecture = fgets($ouvre, 4096); // stockage dans $lecture
$donnee=explode("*",$lecture);  // parsing des données basé sur "*")

$combien=count($donnee)-1; // nbre d'éléments séparés par "*"
echo "<b>Ce fichier contient ",$combien," données : </b><br><br>";

for ($i=0;$i<$combien;$i++)
	{
// suppression des données
// on supprime la donnée si elle contient "2°"
if (ereg("2°",$donnee[$i])){$donnee[$i]=$donnee[$i]="";}
// stockage temporaire des données si donnée non nulle
if ($donnee[$i]!=""){$liste_modif.=$donnee[$i]."*";}
	}

	}
fclose($ouvre);		// fermeture

$ouvre=fopen("texte.txt","w+");
fwrite($ouvre,$liste_modif);
fclose($ouvre);
?>
</body></HTML>

Le résultat à la lecture sera le suivant :

suppression de fichier texte