This page has been robot translated, sorry for typos if any. Original content here.

Comment savoir d'où viennent les visiteurs

Accroché sur mes comptoirs de site, j'ai soudainement constaté que pas une des organisations qui me les fournissait, ne me permet pas de voir quelle requête dans Yandex (et d'autres moteurs de recherche) une personne est venue sur mon site. Au moins, personne ne fournit un tel service gratuitement.

Je me suis alors offusqué du fait que, dans ce cas, je dois moi-même m'écrire un petit bûcheron. Le problème est le plus facile, donc il l'a cassé. Cependant, les propriétaires de tous les sites-compteurs ont l'audace de prendre de l'argent pour cela, inculquant aux gens la conviction que leur argent n'est pas pour rien. Eh bien, nous allons dissiper leurs espoirs de nous baiser!

La page que vous venez de

Donc, pour obtenir la page avec laquelle l'utilisateur est sur celui-ci est plus facile que facile. Son adresse par défaut est passée dans l'en-tête de la requête HTTP de l'utilisateur dans la ligne "Referrer:". Vous pouvez obtenir sa valeur à partir de PHP en appelant la fonction correspondante comme suit:

  getenv ("HTTP_REFERER") 

Donc, en principe, vous pouvez simplement prendre et écrire une fonction séparée qui:

  $ H = getenv ("HTTP_REFERER");  // récupère l'URL d'où vient le visiteur 
 $ f = fopen ("mylog.log", "a");  // ouvre le fichier journal à ajouter 
 troupeau ($ f, 2);  // refuse l'accès, 
 // jusqu'à ce qu'il soit fermé (dans le cas 

 // le script voudra écrire quelque chose en même temps 
 // dans un fichier, l'un d'eux devra attendre) 
 fwrite ($ f, "$ H \ n");  // écrit dans le fichier reçu trois lignes au-dessus de l'URL 
 fclose ($ f);  // ferme le fichier 

Cette fonction peut ensuite être appelée au début de chaque script php des pages du site.

Comment trouver ip, votre destin et l'heure exacte

Mais! Puisque nous sommes ici, vous pouvez légèrement modifier la fonction pour connaître l'IP du visiteur (vous pouvez estimer approximativement la zone où il se trouve physiquement), son navigateur (intéressant) et la page où il est réellement arrivé (ça sonne un peu étrange - nous sommes donc nous savons qu'il est venu sur notre page, mais imaginez que vous avez cette fonction appelée dans la section du code d'en-tête, qui est également insérée dans toutes vos pages - et ainsi, peut-être, vous le ferez). Il serait également agréable d'avoir un moment où les gens sont venus sur notre site - alors vous pouvez analyser l'activité des utilisateurs, etc.

Ainsi, la fonction prendra la forme suivante:

  $ er_time = date ("H: i: sd M Y");  // écrire l'heure actuelle dans une chaîne, 
 // en utilisant le format spécifié 
 $ U = getenv ("HTTP_USER_AGENT");  // obtenir les données sur le logiciel, 

 // qui est utilisé par l'utilisateur 
 $ H = getenv ("HTTP_REFERER");  // récupère l'URL d'où vient le visiteur 
 $ R = getenv ("REMOTE_ADDR");  // obtenir l'adresse IP du visiteur 
 $ W = getenv ("REQUEST_URI");  // obtenir l'adresse relative de la page, 
 // le visiteur a demandé 
 $ f = fopen ("logs / visits.log", 'a');  // En outre - il est compréhensible, nous écrivons tout cela dans un fichier 
 troupeau ($ f, 2); 
 fwrite ($ f, "$ er_time \ n Br: $ U \ n Rf: $ H \ n IP: $ R \ n Rq: $ W \ n"); 
 fclose ($ f); 

Mais cette fonction est loin d'être parfaite! Le fait est que vous ne verrez pas de caractères russes dans ces URL - ils seront remplacés par leurs 16-richesses (précédé du signe "%"). Par conséquent, il serait bien que le script les amène indépendamment à une forme lisible:

  http://www.yandex.ru/yandsearch?text=%E9%EE%E6%FB%E3+%F4%F2%F3%EC%E0%ED%E5&stype=www 

sur le

  http://www.yandex.ru/yandsearch?text=yzhyg+fthumane&stype=www 

En faisant cela, nous serons le morceau de code suivant en utilisant des expressions régulières:

  while (ereg ('% ([0-9A-F] {2})', $ H)) {// tant que $ H est au moins un 
 // la combinaison du signe% et de deux caractères des plages 0-9 et AF 
 // (chiffres hexadécimaux) 
 $ val = ereg_replace ('. *% ([0-9A-F] {2}). *', '\ 1', $ H); 
 // assigner $ val au résultat du remplacement de l'expression, 
 // contenant un pourcentage et deux caractères des intervalles ci-dessus, 
 // ces deux symboles 
 // en bref, maintenant en $ val nous avons les 2 caractères suivants, 
 // avant lequel dans l'expression originale était le pourcentage 
 $ newval = chr (hexdec ($ val));  // récupère le sigil avec le numéro, 
 // la traduction reçue en $ val 
 // nombre hexadécimal dans la "normale" 
 $ H = str_replace ('%'. $ Val, $ newval, $ H); 
 // fonction de substitution de chaîne standard - 
 // remplace une sous-chaîne composée de pourcentages et d'autres caractères 
 // de la variable $ var au caractère que ces deux 
 // caractères hexadécimaux codés 
 } // fin du cycle :)

Total:

  $ er_time = date ("H: i: sd M Y");  // écrire l'heure actuelle dans une chaîne, 
 // en utilisant le format spécifié 
 $ U = getenv ("HTTP_USER_AGENT");  // obtenir les données sur le logiciel, 
 // qui est utilisé par l'utilisateur 
 $ H = getenv ("HTTP_REFERER");  // récupère l'URL d'où vient le visiteur 
 $ R = getenv ("REMOTE_ADDR");  // obtenir l'adresse IP du visiteur 
 $ W = getenv ("REQUEST_URI");  // obtenir l'adresse relative de la page, 
 // le visiteur a demandé 
 while (ereg ('% ([0-9A-F] {2})', $ H)) {// tant que $ H est au moins un 
 // la combinaison du signe% et de deux caractères des plages 0-9 et AF 
 // (chiffres hexadécimaux) 
 $ val = ereg_replace ('. *% ([0-9A-F] {2}). *', '\ 1', $ H); 
 // assigner $ val au résultat du remplacement de l'expression, 
 // contenant un pourcentage et deux caractères des intervalles ci-dessus, 
 // ces deux symboles 
 // en bref, maintenant en $ val nous avons les 2 caractères suivants, 
 // avant lequel dans l'expression originale était le pourcentage 
 $ newval = chr (hexdec ($ val));  // récupère le sigil avec le numéro, 
 // la traduction reçue en $ val 
 // nombre hexadécimal dans la "normale" 
 $ H = str_replace ('%'. $ Val, $ newval, $ H); 
 // fonction de substitution de chaîne standard - 
 // remplace une sous-chaîne composée de pourcentages et d'autres caractères 
 // de la variable $ var au caractère que ces deux 
 // caractères hexadécimaux codés 
 } // fin du cycle :) $ f = fopen ("logs / visits.log", 'a');  // En outre - il est compréhensible, nous écrivons tout cela dans un fichier 
 troupeau ($ f, 2); 
 fwrite ($ f, "$ er_time \ n Br: $ U \ n Rf: $ H \ n IP: $ R \ n Rq: $ W \ n"); 
 fclose ($ f); 

Déjà sur les logs de ce script, vous pouvez juger d'où vient le visiteur, quelles pages il a traversé et sur quelle page il a quitté le site. Oui, bien sûr, vous pourriez faire ceci et les sessions - mais nous sommes trop paresseux. Et donc - 2 minutes, et vous pouvez profiter! :)

Vous la reconnaîtrez d'un millier

C'est la base. Ensuite, vous pouvez faire beaucoup de choses: par exemple, à partir des lignes contenant "http://www.yandex.ru/yandsearch", découpez la partie qui contient réellement la demande, et écrivez à un fichier comme "yandex.log" ". En général, sur ce que l'imagination suffira - tout ce qu'il est possible de zababahat!