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

Comment savoir d'où viennent les visiteurs

En suspendant des compteurs sur mon site Web, j'ai soudainement découvert que pas une des organisations qui me les fournissait ne me permettait pas de regarder quel type de requête dans Yandex (et d'autres moteurs de recherche) une personne en particulier était venue sur mon site. Au moins, personne ne fournit ce service gratuitement.

Ensuite, ils m'ont offensé de devoir écrire moi-même un petit bûcheron. Le problème est le plus facile, il est donc impossible de le faire. Cependant, les propriétaires de tous les sites-compteurs ont l'audace de prendre de l'argent pour cela, donnant aux gens l'assurance que leur argent n'est pas en vain. Eh bien, brisons leurs espoirs de nous baiser!

Page vous venez de

Ainsi, obtenir la page à partir de laquelle l'utilisateur a accédé à celle-ci est plus facile que facile. Son adresse par défaut est transmise dans l'en-tête de la requête HTTP de l'utilisateur dans la ligne "Referrer:". Vous pouvez obtenir sa valeur auprès 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'origine du visiteur 
 $ f = fopen ("mylog.log", 'a');  // ouvre un fichier avec les journaux à ajouter 
 troupeau ($ f, 2);  // refuse l'accès jusqu'à ce que 
 // jusqu'à ce qu'il soit fermé (au cas où il y aurait deux 

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

Ensuite, cette fonction peut être appelée au début de chaque script php des pages du site.

Comment connaître l'adresse IP, votre destin et l'heure exacte

Mais! Puisque nous sommes ici, vous pouvez modifier un peu la fonction pour connaître l’adresse IP du visiteur (vous pouvez estimer approximativement la zone où il se trouve physiquement), son navigateur (curieusement) et la page où il est réellement venu (cela semble un peu étrange - nous sommes nous savons donc qu'il est venu sur notre page, mais imaginons que vous appeliez cette fonction dans la section du code d’en-tête qui est également insérée dans toutes vos pages - et vous ferez peut-être cela). Il serait également agréable de connaître le moment où les visiteurs se sont rendus sur notre site. Il sera alors possible d'analyser l'activité des utilisateurs, etc.

Ainsi, la fonction prendra la forme suivante:

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

 // quel utilisateur utilise 
 $ H = getenv ("HTTP_REFERER");  // récupère l'URL d'origine du visiteur 
 $ R = getenv ("REMOTE_ADDR");  // récupère l'adresse IP du visiteur 
 $ W = getenv ("REQUEST_URI");  // récupère l'adresse relative de la page 
 // le visiteur a demandé 
 $ f = fopen ("logs / visits.log", 'a');  // plus loin - c'est clair, on écrit tout ça 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 urlahs. Ils seront remplacés par leurs notions hexadécimales (précédées d'un «%»). Par conséquent, il serait bien que le script les conduise indépendamment à une forme lisible: il remplace tout

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

sur

  http://www.yandex.ru/yandsearch?text=yozygy+ftumane&stype=www 

Nous ferons cela avec le code suivant en utilisant des expressions régulières:

  while (ereg ('% ([0-9A-F] {2})', $ H)) {// tant qu'il existe au moins une ligne dans $ H 
 // une combinaison du signe% et de deux caractères des plages 0-9 et AF 
 // (nombres hexadécimaux) 
 $ val = ereg_replace ('. *% ([0-9A-F] {2}). *', '\ 1', $ H); 
 // assign $ val le résultat du remplacement de l'expression 
 // contenant un pourcentage et deux caractères des intervalles indiqués ci-dessus, 
 // sur ces deux personnages 
 // en bref, nous avons maintenant les 2 prochains caractères de $ val, 
 // avant lequel dans l'expression d'origine était un pourcentage 
 $ newval = chr (hexdec ($ val));  // on obtient le symbole avec le nombre, 
 // obtenu par traduction obtenu dans $ val 
 // nombre hexadécimal à "normal" 
 $ H = str_replace ('%'. $ Val, $ newval, $ H); 
 // fonction standard de remplacement de chaîne - 
 // remplace la sous-chaîne composée de pourcent et d'autres caractères 
 // de la variable $ var au caractère que ces deux 
 // caractères hexadécimaux encodés 
 } // fin de boucle :)

Total:

  $ er_time = date ("H: i: sd M Y");  // écrit l'heure actuelle dans la chaîne 
 // en utilisant le format spécifié 
 $ U = getenv ("HTTP_USER_AGENT");  // obtenir des données sur le logiciel 
 // quel utilisateur utilise 
 $ H = getenv ("HTTP_REFERER");  // récupère l'URL d'origine du visiteur 
 $ R = getenv ("REMOTE_ADDR");  // récupère l'adresse IP du visiteur 
 $ W = getenv ("REQUEST_URI");  // récupère l'adresse relative de la page 
 // le visiteur a demandé 
 while (ereg ('% ([0-9A-F] {2})', $ H)) {// tant qu'il existe au moins une ligne dans $ H 
 // une combinaison du signe% et de deux caractères des plages 0-9 et AF 
 // (nombres hexadécimaux) 
 $ val = ereg_replace ('. *% ([0-9A-F] {2}). *', '\ 1', $ H); 
 // assign $ val le résultat du remplacement de l'expression 
 // contenant un pourcentage et deux caractères des intervalles indiqués ci-dessus, 
 // sur ces deux personnages 
 // en bref, nous avons maintenant les 2 prochains caractères de $ val, 
 // avant lequel dans l'expression d'origine était un pourcentage 
 $ newval = chr (hexdec ($ val));  // on obtient le symbole avec le nombre, 
 // obtenu par traduction obtenu dans $ val 
 // nombre hexadécimal à "normal" 
 $ H = str_replace ('%'. $ Val, $ newval, $ H); 
 // fonction standard de remplacement de chaîne - 
 // remplace la sous-chaîne composée de pourcent et d'autres caractères 
 // de la variable $ var au caractère que ces deux 
 // caractères hexadécimaux encodés 
 } // fin de boucle :) $ f = fopen ("logs / visits.log", 'a');  // plus loin - c'est clair, on écrit tout ça 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à par les journaux de ce script, vous pouvez juger d'où vient le visiteur, quelles pages il a parcourues et quelle page il a quitté le site. Oui, bien sûr, il était possible de le faire en sessions - mais nous sommes trop paresseux. Et ainsi - 2 minutes, et vous pourrez en profiter! :)

Vous la reconnaîtrez de mille.

Ceci est la base. Ensuite, vous pouvez penser à beaucoup de choses: par exemple, dans les lignes contenant "http://www.yandex.ru/yandsearch", coupez la partie qui contient réellement la demande et écrivez dans un fichier comme "yandex.log ". En général, à quoi sert le fantasme - tout peut être oublié!