Lister les référents dans un fichier texte
imperf
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
imperf Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
imperf Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
Bonjour! J'ai besoin d'aide pour un problème qui me désespère:
J'aimerais à chaque visite d'internaute sur mon site, ajouter dans un fichier "réferers.txt" le référent, la page demandée et le chiffre 1.
Pour cela j'aimerais procéder ainsi:
1. vérifier que le référent n'est pas de mon site
2. si c'est ok, vérifier dans le fichier referers.txt si le référent est déjà listé.
3. si listé, le chiffre 1 de sa ligne augmente
4. s'il n'est pas listé, les trois informations sont ajoutés en première ligne.
Après 13 heures de recherche, j'ai abandonné. Soit le "if" n'était pas respecté, soit il n'était pas foutu de chercher dans le fichier, soit il me multipliait par 10 le contenu du fichier ou le formatait ... Voici la portion de code la plus stable que j'ai obtenue:
J'ai vraiment besoin d'une portion codée, car apparemment, je suis incapable de le faire toute seul ;__;
Merci de votre aide!
J'aimerais à chaque visite d'internaute sur mon site, ajouter dans un fichier "réferers.txt" le référent, la page demandée et le chiffre 1.
Pour cela j'aimerais procéder ainsi:
1. vérifier que le référent n'est pas de mon site
2. si c'est ok, vérifier dans le fichier referers.txt si le référent est déjà listé.
3. si listé, le chiffre 1 de sa ligne augmente
4. s'il n'est pas listé, les trois informations sont ajoutés en première ligne.
Après 13 heures de recherche, j'ai abandonné. Soit le "if" n'était pas respecté, soit il n'était pas foutu de chercher dans le fichier, soit il me multipliait par 10 le contenu du fichier ou le formatait ... Voici la portion de code la plus stable que j'ai obtenue:
<?php // récupère ref et url demandée $ref=$_SERVER["HTTP_REFERER"]; $requested=$_SERVER['REQUEST_URI']; // vérifie que le referer existe bien ET n'est pas mon nom de domaine if (strpos($ref,"edge.style.free.fr")==0 and $ref!=""){ $reffile= "referers.txt"; $allrefs = file($reffile); if (eregi($ref, $reffile)) { foreach($allrefs as $line){ $allrefs = explode("|", $line); $plus = $allrefs[2]+1; if ($allrefs[0]==$ref); { // si la première colonne est identique au référer (donc qu'il est déjà listé), on augmente [2] (soit la colonne 3) $allrefs = "$ref|$requested|$plus|\n"; $tempvar= fopen($reffile, "w"); fwrite ($tempvar, $allrefs); } fclose($tempvar); } }else{ // c'est ici que j'aimerais mettre l'alternative qui liste le ref s'il n'existe pas $tempvar = fopen($reffile, "a"); fwrite ($tempvar, " $ref|$requested|1|\n"); fclose($tempvar); } } ?>
J'ai vraiment besoin d'une portion codée, car apparemment, je suis incapable de le faire toute seul ;__;
Merci de votre aide!
A voir également:
- Lister les référents dans un fichier texte
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
4 réponses
voir commentaires et corrections, par contre je n'ai pas testé il peut subsister des erreurs:
<?php // récupère ref et url demandée $ref=$_SERVER["HTTP_REFERER"]; $requested=$_SERVER['REQUEST_URI']; // vérifie que le referer existe bien ET n'est pas mon nom de domaine if (strpos($ref,"edge.style.free.fr")==0 and $ref!=""){ $reffile= "referers.txt"; $allrefs = file($reffile);//la tu lis ton fichier referers.txt ligne par ligne et c'est mis dans un array $allrefs if (eregi($ref, $reffile)) { foreach($allrefs as $key=>$line){ //par cette boucle tu parcours l'array obtenu avec file() ////mais dans la ligne ci dessous tu venait écraser cet array avec $allrefs = explode("|", $line); donc ça ne peut pas marcher il faut mettre un autre nom (ex:$allrefs_line) $allrefs_line = explode("|", $line); $plus = $allrefs_line[2]+1; if ($allrefs_line[0]==$ref); { // si la première colonne est identique au référer (donc qu'il est déjà listé), on augmente [2] (soit la colonne 3) /* $allrefs_line = "$ref|$requested|$plus|\n"; $tempvar= fopen($reffile, "w"); fwrite ($tempvar, $allrefs); //on ecrit à l'endroit ou est le pointeur de fichier ? donc tu n'est pas sur que ce soit sur le bon referer fclose($tempvar); */ //on va proceder diferement: on va modifier directement le contenu de la ligne correspondante dans l'array $allrefs $allrefs[$key]= "$ref|$requested|$plus"; } } }else{ // c'est ici que j'aimerais mettre l'alternative qui liste le ref s'il n'existe pas //on rajoute ta ligne au debut de l'array array_unshift($allrefs,"$ref|$requested|1"."\n"); } //maintenant on va réecrire l'array modifié ligne par ligne dans le fichier if($tempvar= fopen($reffile, "w+")){ //w+ : ouvre en lecture et écriture; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0 foreach($allrefs as $line){ fputs ($tempvar, $line."\n"); } fclose($tempvar); } } ?>
je n'avais pas regardé de près la façon dont tu testait:
if (eregi($ref, $reffile)) c'est pas bon, tu ne peux pas tester le contenu d'un fichier ainsi
essayes:
if (eregi($ref, $reffile)) c'est pas bon, tu ne peux pas tester le contenu d'un fichier ainsi
essayes:
<?php // récupère ref et url demandée $ref=$_SERVER["HTTP_REFERER"]; $requested=$_SERVER['REQUEST_URI']; //variable de travail $ref_trouve=false; // vérifie que le referer existe bien ET n'est pas mon nom de domaine if (strpos($ref,"edge.style.free.fr")==0 and $ref!=""){ $reffile= "referers.txt"; $allrefs = file($reffile);//la tu lis ton fichier referers.txt ligne par ligne et c'est mis dans un array $allrefs foreach($allrefs as $key=>$line){ //par cette boucle tu parcours l'array obtenu avec file() $allrefs_line = explode("|", $line); $plus = $allrefs_line[2]+1; if ($allrefs_line[0]==$ref); { // si la première colonne est identique au référer (donc qu'il est déjà listé), on augmente [2] (soit la colonne 3) //on va proceder differement: on va modifier directement le contenu de la ligne correspondante dans l'array $allrefs $allrefs[$key]= "$ref|$requested|$plus"; $ref_trouve=true; //on mémorise qu'on a trouvé le ref } } if($ref_trouve == false){ //on rajoute ta ligne au debut de l'array array_unshift($allrefs,"$ref|$requested|1"."\n"); } //maintenant on va réecrire l'array modifié ligne par ligne dans le fichier if($tempvar= fopen($reffile, "w+")){ //w+ : ouvre en lecture et écriture; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0 foreach($allrefs as $line){ fputs ($tempvar, $line."\n"); } fclose($tempvar); } } ?>
Bonsoir ~ Merci beaucoup de votre aide! Aucune erreur php ne m'est indiquée à l'exécution, en revanche, seule la partie "ajout du referer" se manifeste (et non l'ajout +1)
Peut-être ai-je mal saisi cette partie (pas sûre du tout; je devais changer quelque chose ?)
Merci d'avoir pris le temps de commenter le code!
Peut-être ai-je mal saisi cette partie (pas sûre du tout; je devais changer quelque chose ?)
$allrefs_line = "$ref|$requested|$plus|\n"; $tempvar= fopen($reffile, "w"); fwrite ($tempvar, $allrefs); //on ecrit à l'endroit ou est le pointeur de fichier ? donc tu n'est pas sur que ce soit sur le bon referer fclose($tempvar); */ //on va proceder diferement: on va modifier directement le contenu de la ligne correspondante dans l'array $allrefs $allrefs[$key]= "$ref|$requested|$plus";
Merci d'avoir pris le temps de commenter le code!
Pour eregi, je sentais bien que ce n'était pas aproprié, mais toutes les méthodes que j'ai essayé ont échoué alors par désespoir ... XD
Merci beaucoup pour le code! Je viens d'essayer et il se passe une drôle de chose: le referer est listé. Puis au deuxième essai, il est relisté mais avec le compteur augmenté. Et enfin, si un referer différent arrive, il remplace le deux derniers mais en conservant les compteurs. En fait ça m'était arrivée pendant les tests mais je n'ai jamais su d'où ça venait ...
Pourtant ce code a l'air nickel! >.<
Désolée de vous mobiliser, je sentais bien que cette affaire était infernale!
Merci beaucoup pour le code! Je viens d'essayer et il se passe une drôle de chose: le referer est listé. Puis au deuxième essai, il est relisté mais avec le compteur augmenté. Et enfin, si un referer différent arrive, il remplace le deux derniers mais en conservant les compteurs. En fait ça m'était arrivée pendant les tests mais je n'ai jamais su d'où ça venait ...
Pourtant ce code a l'air nickel! >.<
Désolée de vous mobiliser, je sentais bien que cette affaire était infernale!