Lire un .txt mais gerer plusieur lignes

ooiimm Messages postés 17 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 4 mai 2005 - 18 avril 2005 à 12:46
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 18 avril 2005 à 18:35
Salut



J'ai une gallerie dans laquelle j'ai fait un compteur de clic pour un genre de cote de popularité de chaque image.



Je sais faire fonctionner le compteur avec un fichier, mais j'ai
environ 200 photos alors je voudrai faire un seul fichier qui
comptabilise tous les clics de toutes les images.



Pour le moment j'utilise ces codes :

Pour lire le fichier

Affiché

<?php

$fichier = 'clic/04.txt'; // on déclare le nom du fichier à ouvrir



$taille = filesize($fichier); //donne la taille du fichier



$fp = fopen($fichier,'r'); //ouverture du fichier en lecture seule



while(!feof($fp)) //feof indiquera la fin du fichier, donc dans cette boucle, le fichier est parcouru jusqu 'à la fin

{

$ligne = fgets($fp,$taille); //lecture du fichier et stockage dans la variable ligne



print $ligne.''; //affiche la ligne à l'écran, n'oubliez pas le
qui est le retour à la ligne html

}

fclose($fp); //pensez à refermer à la fin du script

?> fois.



Et pour écrire un clic de plus :

<?

$fichier = 'clic/'.$_GET['id'].'.txt';

$fp = file($fichier);// ici j'utilise file()cette fonction stock le
contenu du fichier sous forme d'un tableau (array) dans la variable $fp

$compteur = $fp[0] + 1; // on ajoute 1 au compteur actuel

$nouveau = fopen($fichier,'w+'); //on ouvre le fichier en écriture

fwrite($nouveau,"$compteur \n"); // on écrit le nouveau numéro de
compteur dans le fichier, en supprimant les anciennes données, le
fichier est créé s'il n'existe pas

fclose($nouveau); //on referme le fichier

?>

Deux codes que j'ai trouvé sur le web.



Quelqu'un peux m'expliquer comment utiliser qu'un seul fichier avec 200
lignes, et pouvoir naviguer dans ce fichier pour lire les clics ?



Mes photos s'appellent Image01 Image02 etc donc il serai facile de s'y retrouver Premiere ligne > Image 1 etc etc



Merci d'avance!

[OiM]

8 réponses

JoJo738 Messages postés 1267 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 29 juin 2010 2
18 avril 2005 à 13:36
Lu,

euh, je te conseil vivement MySQL. Sinon tu peux le faire grace à des regex.

Tu mets tous dans un fichier .txt, lignes par lignes.

Tu fais une regex du genre :

preg_replace('`(' . $numero_de_img . ') ([0-9]+);`', '$1 ' . $nouveau numero . ';', $fichier_entier)

Ou bien avec une regex callback. Tu fais la meme regex, sauf que la tu change un peu :

function ma_function($matche) {

return $matche[0]
. ' = ' . ($matche[1]+1) . ';' // je ne sais plus si il faut faire 0
puis 1, ou 1 puis 2, il faut voir la doc

}

pre_replace_callback'`(' . $numero_de_img . ') = ([0-9]+);`', 'ma_fonction', $fichier_entier);

<hr style="width: 100%; height: 2px;">Si ma reponse te convient, merci de l'accepter !
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
18 avril 2005 à 13:45
Hello,



ca ne va pas etre super pratique...une bdd serait mieux.



mais si tu y tiens...

D'abord, comme tu vas modifier n'importe quel endroit de ton fichier
texte, je te conseille de separer chaque "ligne" avec un retour
chariot, par exemple, ou un autre caractere.

Le mieux etant meme un truc du genre :

image0001:5;image0002:15

etc...

Ensuite tu lis ton fichier, et tu l'explode (explode() ) sur ce
caractere. Ainsi tu auras chaque image et clic dans une entree d'un
tableau.

genre $tab[0] = 'image0001:5';

ensuite il est facile de modifier avec un substr() ton clic. Quant a
trouver la bonne ligne, c'est simple aussi : la clef 0 sera ton image
1, la clef 2 ton image 3 etc...(mais tu peux aussi cvhanger ca
evidemment).



Puis tu fais un implode() de ton tableau avec le separateur choisi, et tu reecris ton fichier (completement, en l'ecrasant).



Idem pour lire, evidemment.



A mon avis, c'est une solution lourde. Une base serait bien mieux.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
18 avril 2005 à 13:46
Hello,



plus rapide le Jojo .-)



Mais une regex sur un fichier de 200 lignes, ce n'est surement pas une bonne idee... ;-)
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
18 avril 2005 à 14:08
mais bon je n'en suis pas convaincu parce que la solution du tableau est lourde aussi.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JoJo738 Messages postés 1267 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 29 juin 2010 2
18 avril 2005 à 14:51
Pas telement ...

Si tu fais :

<?php



$numero_de_img = '01'; // numero de l'image à modifier

$fichier = 'fichier.txt';



$data = file_get_contents($fichier); // Mieux de implode() + file()



function up_point($matche) {

return $matche[1] . ' = ' . ($matche[2]+1) . ';';

}


$futur_fichier preg_replace_callback('`(' . $numero_de_img . ') ([0-9]+);`', 'up_point', $data);



// ou

//

// function up_point($a, $b) {

// return $a . ' = ' . ($b+1) . ';';

// }

//
// $futur_fichier preg_replace('`(' . $numero_de_img . ') ([0-9]+);`', up_point('$1', '$2'), $data);



$fp = fopen($fichier, w+);

fwrite($fp, $futur_fichier);

fcolse($fp);

?>

<hr style="width: 100%; height: 2px;">Si ma reponse te convient, merci de l'accepter !
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
18 avril 2005 à 15:20
Cette solution est sans doute mieux oui, je suis d'accord :-)
0
ooiimm Messages postés 17 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 4 mai 2005
18 avril 2005 à 18:22
Oki, merci pour tout ca devrais etre bon =)

[OiM]
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
18 avril 2005 à 18:35
Salut,



lol, tu fais une ligne par image.



Ton fichier a cette forme :



imagemachin

image2machin

image3machin



Ensuite pour mettre les éléments dans un tableau tu fais ceci pour ouvrir ton fichier :



$fichier=file('fichier.txt');



echo $fichier[0]; //affiche "imagemachin"

echo $fichier[1]; //affiche "image2machin"



a +

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
Rejoignez-nous