Comment puis-je savoir d'où ils venaient visiteurs

Hanging sur un site web contre, je me suis soudain trouvé que pas une des organisations qui les fournissent à moi, ne permet pas de voir quelle requête dans Yandex (et d'autres moteurs de recherche) qu'un homme est venu à mon site. Au moins, personne ne propose ce service gratuitement.

Ensuite, je suis offensé par eux pour le fait que je, dans ce cas, vais devoir vous écrire un petit enregistreur. La tâche - le plus facile, parce que la ferraille et de le faire. Toutefois, les propriétaires des sites-compteurs ont l'audace de prendre l'argent pour elle, inculquer aux gens la conviction que leur argent ne sont pas dans l'épaule vain. Eh bien, dissiper leurs espoirs pour nous baiser!

Page, qui est venu

Donc, pour obtenir la page à partir de laquelle l'utilisateur est venu à cette - un jeu d'enfant. Son adresse par défaut est passé dans l'en-tête HTTP de l'utilisateur-query string "Référent:". Obtenez sa valeur de PHP en appelant la fonction correspondante comme suit:

 getenv ( "HTTP_REFERER") 

Donc, en gros, vous pouvez simplement aller et écrire une fonction distincte:

  $ H = getenv ( "HTTP_REFERER");  // Reçoit une URL, à partir de laquelle un visiteur est venu 
 $ F = fopen ( "mylog.log", 'a');  // Ouvre un fichier avec les journaux pour ajouter 
 flock ($ f, 2);  // Désactive l'accès à jusqu'à ce que 
 // Jusqu'à ce qu'il soit fermé (dans le cas de deux 

 // Script en même temps veulent écrire quelque chose 
 // Dans le fichier, l'un d'entre eux devront attendre) 
 fwrite ($ f, "$ H \ n");  // Ecrit dans un fichier reçu trois points de suture au-dessus URL 
 fclose ($ f);  // Ferme le fichier 

Ensuite, cette fonction peut être appelée au début de kakzhdogo pages php-scripts du site.

Comment trouver ip, leur sort et l'heure exacte

Mais! Depuis que nous sommes ici, nous pouvons finir une petite fonction pour trouver le IP du visiteur (comme il est possible d'estimer à peu près la zone où il se trouve physiquement), son navigateur (intéressant) et une page où il est réellement venu (semble un peu étrange - nous formons et nous savons donc qu'il est venu à notre site Web, mais imaginez que vous avez cette fonction est appelée dans la section d'en-tête de code qui est inséré de la même manière toutes vos pages - et ainsi, peut-être, vous avez fait). En outre, il serait agréable d'avoir le temps, quand les gens viennent à notre site - et alors il sera possible d'analyser l'activité des utilisateurs, etc.

Ainsi, la fonction prend la forme suivante:

  $ Er_time = date ( "H: i: sd M Y");  // Ecrire l'heure actuelle dans une rangée, 
 // Utilisation du format spécifié 
 $ U = getenv ( "HTTP_USER_AGENT");  // Obtenir les données sur le logiciel, 

 // Quel ispol'uet utilisateur 
 $ H = getenv ( "HTTP_REFERER");  // Obtenir l'URL, à partir de laquelle un visiteur est venu 
 $ R = getenv ( "REMOTE_ADDR");  // Obtenir IP du visiteur 
 $ W = getenv ( "REQUEST_URI");  // Obtenir l'adresse relative d'une page, 
 // Ce qui demande le visiteur 
 $ F = fopen ( "logs / visits.log", 'a');  // En outre - il est clair, nous écrivons tout cela dans un fichier 
 flock ($ f, 2); 
 ; Fwrite ($ de f, "$ W \ n $ H \ n IP::: $ R \ n Rq $ er_time \ n Br: $ U \ n Rf") 
 fclose ($ f); 

Mais cette fonction est loin d'être parfait! Le fait que le caractère russe vous dans ces urlah pas voir - ils les remplacer par la représentation de 16 hexadécimal (précédé par "%" signe). Donc, être gentil avec votre propre script les a conduit à une forme lisible: remplacé toutes sortes

  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=йожыг+фтумане&stype=www 

Pour ce faire, nous allons être le prochain morceau de code en utilisant des expressions régulières:

 tandis que (ereg ( '% ([0-9A-F] {2})', $ H)) {// tandis que dans la ligne $ H est au moins une combinaison de la marque //% et deux personnages des gammes 0-9 et AF // (chiffres hexadécimaux) $ val = ereg_replace ( '*% ([0-9A-F] {2}) * ..', '\ 1', $ H);  / / Attribuer le résultat $ val de l'expression de remplacement, / / ​​contient le pourcentage et deux caractères à partir des intervalles supérieurs précités / / à ces deux mêmes caractères / / short, maintenant $ val nous avons ensuite 2 caractères, / / ​​à qui les termes originaux le pourcentage était de $ newval = chr (hexdec ($ val));  // Obtenir la valeur de charset avec le nombre // se traduit en $ obtenu du val // nombre hexadécimal dans le $ H = str_replace "normal" ( '%' $ val, $ newval, $ H.);  // Chaîne standard de remplacement de fonction - // remplace une chaîne composée de l'intérêt et Druh // caractères à partir d'une variable $ var sur un symbole que ces deux // caractères hexadécimaux codés} // fin du cycle :)

total:

  $ Er_time = date ( "H: i: sd M Y");  // Ecrire l'heure actuelle dans une rangée, 
 // Utilisation du format spécifié 
 $ U = getenv ( "HTTP_USER_AGENT");  // Obtenir les données sur le logiciel, 
 // Quel ispol'uet utilisateur 
 $ H = getenv ( "HTTP_REFERER");  // Obtenir l'URL, à partir de laquelle un visiteur est venu 
 $ R = getenv ( "REMOTE_ADDR");  // Obtenir IP du visiteur 
 $ W = getenv ( "REQUEST_URI");  // Obtenir l'adresse relative d'une page, 
 // Ce qui demande le visiteur 
 tandis que (ereg ( '% ([0-9A-F] {2})', $ H)) {// tandis que dans la ligne $ H est au moins un 
 // Signe combiné% et les deux personnages des gammes 0-9 et AF 
 // (chiffres hexadécimaux) 
 $ Val = ereg_replace ( '*% ([0-9A-F] {2}) * ..', '\ 1', $ H); 
 // Résultat Assign $ val du remplacement de l'expression, 
 // Contient le pourcentage et deux symboles des intervalles au-dessus du susdit, 
 // Sur ces deux mêmes caractères 
 // Short, nous avons maintenant $ val 2 caractères suivants, 
 // En face de laquelle se trouvait un pourcentage des conditions initiales 
 $ Newval = chr (hexdec ($ val));  // Obtenez le numéro de valeur charset, 
 // Être traduit résultant en $ val 
 // Nombre hexadécimal dans la "normale" 
 $ H = str_replace ( '%' $ val, $ newval, $ H.); 
 // Fonction de remplacement de chaîne Standard - 
 // Remplace une sous-chaîne constituée des caractères d'intérêt et Druh 
 // De la variable $ var sur un symbole que ces deux 
 // caractères hexadécimaux codés 
 } // Fin du cycle :) $ F = fopen ( "logs / visits.log", 'a');  // En outre - il est clair, nous écrivons tout cela dans un fichier 
 flock ($ f, 2); 
 ; Fwrite ($ de f, "$ W \ n $ H \ n IP::: $ R \ n Rq $ er_time \ n Br: $ U \ n Rf") 
 fclose ($ f); 

Déjà sur les journaux de ce script peut être vu, où le visiteur est venu, sur quelle page il a été détenu, et sur quelle page du site gauche. Oui, bien sûr, vous pouvez le faire et les sessions - mais nous étions trop paresseux. Et donc - deux minutes, et vous pouvez profiter! :)

Reconnaissez-vous des milliers

Ce - la base. Ensuite, vous pouvez penser à beaucoup de choses: par exemple, les lignes qui contiennent yandex.log "http://www.yandex.ru/yandsearch", couper la partie dans laquelle, en fait, contient une requête et écrire à tout type de fichier " ». En général, à cette fantaisie assez - tout peut être zababahat!