Wie kann ich wissen, woher sie Besucher kamen

die Abfrage in Yandex (und andere Suchmaschinen), dass ein Mann kam zu meiner Seite hängend auf einer Website Zähler, fand ich plötzlich, dass nicht eine der Organisationen, die sie mir zur Verfügung stellen, darf nicht zu sehen. Zumindest bietet niemand diesen Service kostenlos.

Dann wurde ich von ihnen für die Tatsache, beleidigt, dass ich, in diesem Fall wird sich ein wenig Logger zu schreiben. Die Aufgabe - die einfachste, weil und Schrott, es zu tun. Allerdings haben die Inhaber einer Website-Zähler die Kühnheit, das Geld dafür zu nehmen, in die Menschen Einträufeln den Glauben, dass ihr Geld nicht umsonst Schulter ist. Nun, zerstreuen ihre Hoffnungen uns ficken!

Seite, die kam

Also, um die Seite, von der der Benutzer auf diese Idee gekommen - eine Brise. Die Standardadresse ist im HTTP-Header der Benutzer-Abfrage-String übergeben "Werber". Erhalten Sie seinen Wert von PHP durch die entsprechende Funktion aufgerufen wird, wie folgt:

  getenv ( "HTTP_REFERER") 

Also, im Grunde, können Sie einfach gehen und eine eigene Funktion schreiben, dass:

  $ H = getenv ( "HTTP_REFERER");  // Eine URL empfängt, aus dem ein Besucher kam 
 $ F = fopen ( "mylog.log", "a");  // Öffnet eine Datei mit Protokollen hinzufügen 
 Herde ($ f, 2);  // Deaktiviert den Zugriff auf sie, bis 
 // Bis sie geschlossen ist (im Falle zweier 

 // Script zur gleichen Zeit wollen, etwas zu schreiben 
 // In der Datei, einer von ihnen wird warten müssen) 
 fwrite ($ f "$ H \ n");  // Schreibt in eine Datei empfangen drei Stiche oben URL 
 fclose ($ f);  // Schließt die Datei 

Dann kann diese Funktion zu Beginn des kakzhdogo PHP-Skript Seiten der Website aufgerufen werden.

Wie finden ip, ihr Schicksal und den genauen Zeitpunkt

Aber! Seit wir hier sind, können wir eine kleine Funktion beenden des Besuchers IP zu finden (wie es möglich ist, in etwa die Fläche abschätzen, wo es physisch befindet), seinen Browser (interessanterweise) und eine Seite, wo er tatsächlich kam (klingt ein bisschen seltsam - wir trainieren und so dass wir wissen, dass er auf unsere Website gekommen ist, aber sich vorstellen, dass Sie diese Funktion im Kopfteil des Codes aufgerufen wird, der auf die gleiche Weise alle Ihre Seiten eingefügt wird - und so vielleicht Sie tat). Auch wäre es schön, die Zeit zu haben, wenn die Leute auf unsere Seite kommen - und dann wird es möglich sein, die Benutzeraktivität zu analysieren usw.

So nimmt die Funktion die folgende Form:

  $ Er_time = date ( "H: i: sd M Y");  // Die aktuelle Uhrzeit Schreiben in einer Reihe, 
 // Die Verwendung des angegebenen Format 
 $ U = getenv ( "HTTP_USER_AGENT");  // Die Daten über die Software zu erhalten, 

 // Welche ispol'uet Benutzer 
 $ H = getenv ( "HTTP_REFERER");  // Erhalten die URL, von dem ein Besucher kam 
 $ R = getenv ( "REMOTE_ADDR");  // Holen Sie sich das IP des Besuchers 
 $ W = getenv ( "REQUEST_URI");  // Die relative Adresse einer Seite, 
 // Welche forderte die Besucher 
 $ F = fopen ( "logs / visits.log", "a");  // Weitere - klar ist, schreiben wir das alles in eine Datei 
 Herde ($ f, 2); 
 fwrite ($ f "$ er_time \ n Br: $ U \ n Rf: $ H \ n IP: $ R \ n Rq: $ W \ n"); 
 fclose ($ f); 

Aber diese Funktion ist bei weitem nicht perfekt! Die Tatsache, dass die russische Zeichen, das Sie in diesen urlah nicht sehen - sie sie mit 16-hexadezimale Darstellung ersetzen wird (durch "%" Zeichen vorangestellt). So schön, um Ihre eigenen Skript sie in eine lesbare Form geführt: ersetzt alle Arten

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

auf

  http://www.yandex.ru/yandsearch?text=йожыг+фтумане&stype=www 

Um dies zu tun, werden wir das nächste Stück Code mit regulären Ausdrücken sein:

  während (ereg ( '% ([0-9A-F] {2})', $ H)) {// während in Zeile $ H ist mindestens ein 
 // Kombinationszeichen% und die beiden Charaktere aus den Bereichen 0-9 und AF 
 // (Hexadezimalzahlen) 
 $ Val = ereg_replace ( '*% ([0-9A-F] {2}) * ..', '\ 1', $ H); 
 // Zuweisen $ val Ergebnis der Ersatz des Ausdrucks, 
 // Den Prozentsatz und zwei Symbole der Intervalle über dem vorgenannten Enthält, 
 // Auf diesen gleichen zwei Zeichen 
 // Kurz, jetzt haben wir $ val nächsten 2 Zeichen, 
 // Vor dem stand ein Prozentsatz der ursprünglichen Bedingungen 
 $ NewVal = chr (hexdec ($ val));  // Die charset Wert Nummer, 
 // Lassen Sie sich was zu $ ​​val übersetzt 
 // Hexadezimal-Nummer in den "normalen" 
 $ H = str_replace ( '%' $ val, $ newval, $ H.); 
 // Standard-String-Ersatzfunktion - 
 // Ersetzt eine Teil bestehend aus den Zinsen und druh Zeichen 
 // Von der Variablen $ var auf ein Symbol, dass diese beiden 
 // Hexadezimal Zeichen codiert 
 } // Ende des Zyklus :)

Total:

  $ Er_time = date ( "H: i: sd M Y");  // Die aktuelle Uhrzeit Schreiben in einer Reihe, 
 // Die Verwendung des angegebenen Format 
 $ U = getenv ( "HTTP_USER_AGENT");  // Die Daten über die Software zu erhalten, 
 // Welche ispol'uet Benutzer 
 $ H = getenv ( "HTTP_REFERER");  // Erhalten die URL, von dem ein Besucher kam 
 $ R = getenv ( "REMOTE_ADDR");  // Holen Sie sich das IP des Besuchers 
 $ W = getenv ( "REQUEST_URI");  // Die relative Adresse einer Seite, 
 // Welche forderte die Besucher 
 während (ereg ( '% ([0-9A-F] {2})', $ H)) {// während in Zeile $ H ist mindestens ein 
 // Kombinationszeichen% und die beiden Charaktere aus den Bereichen 0-9 und AF 
 // (Hexadezimalzahlen) 
 $ Val = ereg_replace ( '*% ([0-9A-F] {2}) * ..', '\ 1', $ H); 
 // Zuweisen $ val Ergebnis der Ersatz des Ausdrucks, 
 // Den Prozentsatz und zwei Symbole der Intervalle über dem vorgenannten Enthält, 
 // Auf diesen gleichen zwei Zeichen 
 // Kurz, jetzt haben wir $ val nächsten 2 Zeichen, 
 // Vor dem stand ein Prozentsatz der ursprünglichen Bedingungen 
 $ NewVal = chr (hexdec ($ val));  // Die charset Wert Nummer, 
 // Lassen Sie sich was zu $ ​​val übersetzt 
 // Hexadezimal-Nummer in den "normalen" 
 $ H = str_replace ( '%' $ val, $ newval, $ H.); 
 // Standard-String-Ersatzfunktion - 
 // Ersetzt eine Teil bestehend aus den Zinsen und druh Zeichen 
 // Von der Variablen $ var auf ein Symbol, dass diese beiden 
 // Hexadezimal Zeichen codiert 
 } // Ende des Zyklus :) $ F = fopen ( "logs / visits.log", "a");  // Weitere - klar ist, schreiben wir das alles in eine Datei 
 Herde ($ f, 2); 
 fwrite ($ f "$ er_time \ n Br: $ U \ n Rf: $ H \ n IP: $ R \ n Rq: $ W \ n"); 
 fclose ($ f); 

Bereits auf Protokolle können dieses Skript zu sehen, wo der Besucher kam, auf welcher Seite er stattfand, und auf welcher Seite der Website links. Ja, natürlich, können Sie es und Sitzungen zu tun - aber wir waren zu faul. Und so - zwei Minuten und Sie können genießen! :)

Haben Sie es von den Tausenden erkennen

Diese - die Basis. Dann können Sie eine Menge Dinge denken: zum Beispiel Zeilen, die "http://www.yandex.ru/yandsearch" enthalten, schneiden Sie den Teil, in dem in der Tat, eine Abfrage enthält und schreiben zu jedem Dateityp "yandex.log ". In der Regel zu dieser Phantasie genug - alles kann zababahat werden!