Lister les référents dans un fichier texte

Fermé
imperf Messages postés 8 Date d'inscription dimanche 20 novembre 2011 Statut Membre Dernière intervention 27 avril 2015 - Modifié par imperf le 20/11/2011 à 12:42
imperf Messages postés 8 Date d'inscription dimanche 20 novembre 2011 Statut Membre Dernière intervention 27 avril 2015 - 21 nov. 2011 à 22:40
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:


<?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:

4 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
21 nov. 2011 à 13:50
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);
	}	
} 
?>
1
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
21 nov. 2011 à 22:16
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:
<?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);
	}	
} 
?>
1
imperf Messages postés 8 Date d'inscription dimanche 20 novembre 2011 Statut Membre Dernière intervention 27 avril 2015
Modifié par imperf le 21/11/2011 à 21:45
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 ?)

    $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!
0
imperf Messages postés 8 Date d'inscription dimanche 20 novembre 2011 Statut Membre Dernière intervention 27 avril 2015
21 nov. 2011 à 22:40
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!
0