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

Wie finde ich heraus, woher die Besucher kamen?

Hängend auf meinen Website-Counters, habe ich plötzlich festgestellt, dass nicht eine der Organisationen, die sie mir zur Verfügung gestellt, Sie nicht zu sehen, welche Abfrage in Yandex (und anderen Suchmaschinen) eine Person auf meine Website kam. Zumindest stellt niemand einen solchen Dienst kostenlos zur Verfügung.

Dann habe ich sie beleidigt, weil ich in diesem Fall mir selbst einen kleinen Logger schreiben muss. Das Problem ist am einfachsten, deshalb hat es es gebrochen. Allerdings haben die Besitzer aller Seiten-Zähler die Kühnheit, Geld dafür zu nehmen, um den Leuten den Glauben zu vermitteln, dass ihr Geld nicht umsonst ist. Nun, wir werden ihre Hoffnungen, uns zu ficken, vertreiben!

Die Seite, von der du gekommen bist

So ist es einfacher als einfach, die Seite zu bekommen, mit der der Benutzer auf diese Seite gekommen ist. Seine Standardadresse wird in der Kopfzeile der HTTP-Anfrage des Benutzers in der Zeile "Referrer:" übergeben. Sie können den Wert von PHP erhalten, indem Sie die entsprechende Funktion wie folgt aufrufen:

  getenv ("HTTP_REFERER") 

Im Prinzip können Sie einfach eine separate Funktion erstellen und schreiben:

  $ H = getenv ("HTTP_REFERER");  // Erhalte die URL, von der der Besucher kam 
 $ f = fopen ("mylog.log", "a");  // öffnet die hinzuzufügende Protokolldatei 
 Herde ($ f, 2);  // verweigert den Zugriff darauf, 
 // bis es geschlossen ist (falls zwei 

 // Skript möchte etwas gleichzeitig schreiben 
 // zu einer Datei, einer von ihnen muss warten) 
 fwrite ($ f, "$ H \ n");  // schreibt in die Datei drei Zeilen über der URL 
 fclose ($ f);  // schließt die Datei 

Dann kann diese Funktion am Anfang jedes PHP-Skripts der Seiten aufgerufen werden.

Wie man IP, dein Schicksal und die genaue Zeit erkennt

Aber! Da wir hier sind, können Sie die Funktion leicht verändern, um die IP des Besuchers herauszufinden (Sie können grob abschätzen, wo sich das Objekt befindet), seinen Browser (interessanterweise) und die Seite, auf der es tatsächlich war (es klingt ein bisschen komisch - wir sind es Wir wissen also, dass er zu unserer Seite gekommen ist, aber stellen Sie sich vor, dass Sie diese Funktion im Abschnitt des Header-Codes aufgerufen haben, der in alle Ihre Seiten eingefügt wird - und vielleicht werden Sie das auch tun. Es wäre auch schön, eine Zeit zu haben, wenn Leute auf unsere Seite kommen - dann können Sie die Aktivität von Benutzern usw. analysieren.

Also, die Funktion wird die folgende Form annehmen:

  $ er_time = Datum ("H: i: sd M Y");  // schreibe die aktuelle Zeit in einen String, 
 // Verwenden des angegebenen Formats 
 $ U = getenv ("HTTP_USER_AGENT");  // die Daten über die Software erhalten, 

 // welches vom Benutzer verwendet wird 
 $ H = getenv ("HTTP_REFERER");  // Erhalte die URL, von der der Besucher kam 
 $ R = getenv ("REMOTE_ADDR");  // Erhalte die IP des Besuchers 
 $ W = getenv ("REQUEST_URI");  // Erhalte die relative Adresse der Seite, 
 // Der Besucher hat darum gebeten 
 $ f = fopen ("logs / visits.log", "a");  // Weiter - es ist verständlich, wir schreiben das alles in eine Datei 
 Herde ($ f, 2); 
 fwrite ($ f, "$ er_zeit \ n Br: $ U \ n Rf: $ H \ n IP: $ R \ n Rq: $ W \ n"); 
 fclose ($ f); 

Aber diese Funktion ist bei weitem nicht perfekt! Tatsache ist, dass Sie in diesen URLs keine russischen Zeichen sehen - sie werden durch ihre 16-Reichtümer ersetzt (dem Zeichen "%" vorangestellt). Daher wäre es nett, wenn das Skript sie unabhängig zu einer lesbaren Form führt:

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

auf dem

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

Dies wird der folgende Code sein, der reguläre Ausdrücke verwendet:

  while (ereg ('% ([0-9A-F] {2})', $ H)) {// solange $ H mindestens eins ist 
 // die Kombination aus dem Zeichen% und zwei Zeichen aus den Bereichen 0-9 und AF 
 // (hexadezimale Ziffern) 
 $ val = ereg_replace ('. *% ([0-9A-F] {2}). *', '\ 1', $ H); 
 // weise $ val das Ergebnis des Ersetzens des Ausdrucks zu, 
 // enthält einen Prozentsatz und zwei Zeichen aus den obigen Intervallen, 
 // diese zwei Symbole 
 // kurz, jetzt in $ val haben wir die nächsten 2 Zeichen, 
 // vor dem im ursprünglichen Ausdruck der Prozentsatz war 
 $ newval = chr (hexdec ($ val));  // hole das Siegel mit der Nummer, 
 // die empfangene Übersetzung in $ val 
 // Hexadezimalzahl im "normalen" 
 $ H = str_replace ('%'. $ Val, $ newval, $ H); 
 // Standard-String-Substitutionsfunktion - 
 // ersetzt eine Teilzeichenfolge, die aus Prozent und anderen Zeichen besteht 
 // von der Variablen $ var zum Zeichen dieser beiden 
 // Hexadezimalzeichen codiert 
 } // Ende des Zyklus :)

Gesamt:

  $ er_time = Datum ("H: i: sd M Y");  // schreibe die aktuelle Zeit in einen String, 
 // Verwenden des angegebenen Formats 
 $ U = getenv ("HTTP_USER_AGENT");  // die Daten über die Software erhalten, 
 // welches vom Benutzer verwendet wird 
 $ H = getenv ("HTTP_REFERER");  // Erhalte die URL, von der der Besucher kam 
 $ R = getenv ("REMOTE_ADDR");  // Erhalte die IP des Besuchers 
 $ W = getenv ("REQUEST_URI");  // Erhalte die relative Adresse der Seite, 
 // Der Besucher hat darum gebeten 
 while (ereg ('% ([0-9A-F] {2})', $ H)) {// solange $ H mindestens eins ist 
 // die Kombination aus dem Zeichen% und zwei Zeichen aus den Bereichen 0-9 und AF 
 // (hexadezimale Ziffern) 
 $ val = ereg_replace ('. *% ([0-9A-F] {2}). *', '\ 1', $ H); 
 // weise $ val das Ergebnis des Ersetzens des Ausdrucks zu, 
 // enthält einen Prozentsatz und zwei Zeichen aus den obigen Intervallen, 
 // diese zwei Symbole 
 // kurz, jetzt in $ val haben wir die nächsten 2 Zeichen, 
 // vor dem im ursprünglichen Ausdruck der Prozentsatz war 
 $ newval = chr (hexdec ($ val));  // hole das Siegel mit der Nummer, 
 // die empfangene Übersetzung in $ val 
 // Hexadezimalzahl im "normalen" 
 $ H = str_replace ('%'. $ Val, $ newval, $ H); 
 // Standard-String-Substitutionsfunktion - 
 // ersetzt eine Teilzeichenfolge, die aus Prozent und anderen Zeichen besteht 
 // von der Variablen $ var zum Zeichen dieser beiden 
 // Hexadezimalzeichen codiert 
 } // Ende des Zyklus :) $ f = fopen ("logs / visits.log", "a");  // Weiter - es ist verständlich, wir schreiben das alles in eine Datei 
 Herde ($ f, 2); 
 fwrite ($ f, "$ er_zeit \ n Br: $ U \ n Rf: $ H \ n IP: $ R \ n Rq: $ W \ n"); 
 fclose ($ f); 

Bereits in den Logs dieses Skripts können Sie beurteilen, woher der Besucher kam, welche Seiten er durchlaufen hat und auf welcher Seite er die Seite verlassen hat. Ja, natürlich könntest du dies und die Sitzungen machen - aber wir sind zu faul. Und so - 2 Minuten, und Sie können genießen! :)

Du wirst sie von tausend erkennen

Dies ist die Grundlage. Dann können Sie viele Dinge tun: z. B. aus den Zeilen, die "http://www.yandex.ru/yandsearch" enthalten, den Teil, der die Anfrage enthält, ausschneiden und in eine Datei wie "yandex.log" schreiben ". Im Allgemeinen, auf was die Einbildungskraft genügen wird - alles ist mögliches zababahat!