JustPaste.it

Adresy referencyjne w PHP

Zapewne każdy właściciel strony zastanawiał się skąd przychodzą goście. Czy z wyszukiwarek, czy z polecających stron, czy też może po prostu wpisują adres strony i wciskają enter. Najpopularniejsze obecnie darmowe statystyki
STAT4U nie uwzględniają tego typu danych, więc jeśli nie mamy innego sposobu "inwigilowania" naszych gości powinniśmy zając się tymi danymi sami. Dane są dosyć przydatne, bo pokazują rzeczywiste informacje na temat naszej pozycji w wyszukiwarkach dla przeróżnych słów kluczowych i zapytań, stronach, które umieściły link do naszej strony, ewentualnych linków w listach, a czytanych przez Webmail, a także faktyczne ilości kliknięć z systemów wymiany bannerów.

Nagłówek HTTP Referer

Pozwolę sobie przytoczyć kawałek RFC 2616, które tyczy się protokołu HTTP/1.1:
        The Referer[sic] request-header field allows the client to specify,
       for the server's benefit, the address (URI) of the resource from
       which the Request-URI was obtained (the "referrer", although the
       header field is misspelled.) The Referer request-header allows a
       server to generate lists of back-links to resources for interest,
       logging, optimized caching, etc. It also allows obsolete or mistyped
       links to be traced for maintenance. The Referer field MUST NOT be
       sent if the Request-URI was obtained from a source that does not have
       its own URI, such as input from the user keyboard.


Czyli, w wolnym tłumaczeniu: Nagłówek HTTP Referer daje możliwość przeglądarce,
aby powiadomić serwer o adresie dokumentu, który "przysłał" tu
użytkownika. Wykorzystywane to jest do różnych celów tj.: logowanie,
optymalizacja cache'owania, tworzenie listy linków zwrotnych, a czasami także
do diagnostyki. Nagłówek ten nie musi być wysyłany jeśli np. adres strony został
wpisany przez użytkownika.

W praktyce niektóre przeglądarki umożliwiają wyłączenie wysyłania tego nagłówka
do serwera, jednak jest to na tyle rzadkie i nieuzasadnione, że raczej nie
spotyka się tak skonfigurowanych przeglądarek. Dlaczego zwróciłem na to uwagę? Z
bardzo prostego powodu. Adresy referencyjne są najlepszym i najprostszym
sposobem na uzyskanie informacji, czy użytkownik przypadkiem nie powraca na
stronę główną z jakiejś podstrony naszej witryny. Taka informacja pozwala na
wykluczenie tzw. "przeładowań" i rejestrację tylko i wyłącznie
unikalnych wejść. Wyłączenie wysyłania nagłówka spowodowałoby zafałszowanie
wyników, a przecież nikt nie chce do tego dopuścić.

Jak dobrać się do "mięska"?

Ze względu na to, że wyszukiwarki indeksują wszystko, skrypt musi być
wykonywany na każdej podstronie. Nie chcemy przecież, żeby nam coś umknęło.
Skrypt w swojej budowie jest bardzo prosty:

<?php
if ($_SERVER['HTTP_REFERER'] != "") { //jeśli nagłówek nie jest pusty
   if (!strstr($_SERVER['HTTP_REFERER'], "strona.pl")) {
   /*Ten warunek wyklucza indeksowanie naszego własnego referera,
   czyli po prostu nie indeksuje wejść z naszej strony podczas
   normalnego jej przeglądania. Ważne jest, aby nie wpisywać adresu
   strony z www, gdyż wiele osób nie wpisuje tych znaków do adresu.*/
          $plik = fopen("referer.txt", "a");//otwieramy plik
          flock($plik, 2);//blokujemy przed innym zapisem
          fwrite($plik, $_SERVER['HTTP_REFERER'] . "\n", 200);//zapisujemy
          flock($plik, 3);//odblokowujemy
          fclose($plik);//zamykamy
   }
}
?>



Cały skrypt jest wyjątkowo prosty. Wszystko zawdzięczamy PHP i jego wbudowanym funkcjom i
zmiennym. Można jeszcze do tego opracować skrypt, który otwiera do odczytu plik
z adresami referencyjnymi, tworzy z nich hiperłącza i serwuje nam do obejrzenia.
Jednak jest to na tyle proste, że chyba nawet nie wymaga przykładu.

Od momentu uruchomienia "inwigilatora" na naszej stronie będziemy
mieli wgląd w rozprzestrzenianie się informacji o naszej stronie w Internecie.
Czasami jest to naprawdę interesujące.

 

Źródło: http://www.antylameriada.net/wreferer/