Sitenizi ziyaret edenlerin nereden geldiğini HTTP_REFERER ile öğrenmek ve ziyaretçilerin anlık kayıtlarını tutmak

Sitenize ziyaret eden kişilerin kaynağını PHP ortanında öğrenmek $_SERVER dizisindeki HTTP_REFERER değişkeni sayesinde mümkün. Başka sitelerde sitenize link verenler linke tıkladığında aynı zamanda nereden geldiğini HTTP_REFERER ile söylüyor. Bu anahtar değişken sayesinde bir çok ziyaretçi istatistiği tutmak mümkün. Hemen işe başlayalım. Ziyaretçinin bilgilerini tutacak tabloyu veritabanında yaratalım:
CREATE TABLE visitors (
  id int(11) NOT NULL auto_increment,
  visitor_referer varchar(45) collate utf8_bin NOT NULL,
  visitor_ip varchar(18) collate utf8_bin NOT NULL,
  visitor_request_url varchar(100) collate utf8_bin NOT NULL,
  visitor_visit_date date NOT NULL,
  PRIMARY KEY  (id)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_bin ;
Tablodaki alanları kısaca anlatayım:
id : ziyaret id
visitor_referer : sitenize link veren sitenin alan adı
visitor_ip : sitenizi ziyaret eden kişinin ip numarası
visitor_request_url : sitenize yapılan sayfanın URL adresi
visitor_visit_date : ziyaretçinin ziyaret tarihi (2009-08-16 gibi)

PHP scriptimizi yazmadan önce kaydı tablomuza girerken if else kontroluyle HTTP_REFERER değişkenin tanımlanıp tanımlanmadığını kontrol ediyoruz. Bu sayade Sitenize başka bir siteden mi yoksa direk siteye adres satırından girilip girilmediğini anlayabiliriz.
İşte tüm işi yapacak PHP kodumuz:
if ( isset ( $_SERVER['HTTP_REFERER'] ) )
{

// Regular expression ile sitenize link veren sunucunun domain adresini alıyoruz
 preg_match('@^(?:http://)?([^/]+)@i', $_SERVER['HTTP_REFERER'], $matches);
$visitor_referer = $matches[1];
 // Ziyaretçinin ip adresini alıyoruz
$visitor_ip = $_SERVER['REMOTE_ADDR'];
 // İstek yapılan sayfanın adresini alıyoruz
$visitor_request_url =$_SERVER['REQUEST_URI'];
	
// Veritabanına bağlantı yapıyoruz	
$conn=mysql_connect("localhost", "root" ,"");         
mysql_select_db('database',$conn);  

// Bugünkü tarihi kontrol etmek üzere alıyoruz
$today_date=date("Y-m-d");
// Daha önce ziyeretçinin aynı günde aynı ip adresle veya aynı sayfaya istek yapıp yapmadığını   
// burada kontrol ediyoruz. Böylece aynı verileri tekrar girmekten kurtuluyoruz
$sql="select * FROM visitors where (visitor_ip= '$visitor_ip') AND (visitor_visit_date = '$today_date') AND (visitor_referer = '$visitor_referer')";
$result=mysql_query($sql , $conn ); 
$total =mysql_num_rows($result);
 // 0 değilse daha önce bu verinin girilmediğini anlıyoruz
	if ( $total == 0 )	
	{
	$sql="INSERT INTO visitors VALUES ('NEW.id' ,'$visitor_referer','$visitor_ip','$visitor_request_url',NOW())";
	mysql_query($sql,$conn); 
	}

	
}

// Bu kısımda ziyaretçi sitenizi direk olarak ziyaret ettiğinde yapılacak işi yapıyoruz.
// Tek farkı HTTP_REFERER bilgisine direct yazıyoruz. 

else 

{
	
$conn=mysql_connect("localhost", "root" ,"");         
mysql_select_db('database',$conn); 

$visitor_ip = $_SERVER['REMOTE_ADDR'];
$visitor_request_url =$_SERVER['REQUEST_URI'];

$today_date=date("Y-m-d");
$sql="select * FROM visitors where (visitor_ip= '$visitor_ip') AND (visitor_visit_date = '$today_date') AND (visitor_referer = 'direct') ";
$result=mysql_query($sql , $conn ); 
$total =mysql_num_rows($result);

	if ( $total == 0 )	
	{
	$sql="INSERT INTO visitors VALUES ('NEW.id' ,'direct','$visitor_ip','$visitor_request_url',NOW())";
	mysql_query($sql,$conn);
	}
}
   
   
Yaptığım örneği test edip çalıştırdım. Sonuç olarak aşağıdaki resme göz atabilirsiniz.
Sitenizi ziyaret edenlerin nereden geldiğini HTTP_REFERER ile öğrenmek
yazan Zülküf Küçüközer tarih   17th August 2009
primary key words  Ziyaret | Httpreferer | Php | Visitorip okunma  16252
secondary key words  Ip | Visitors
writing Web Anonim writing 28th September 2012
Paylaşım için teşekkürler tamda aradığım buydu.
writing ihsan writing 31st October 2013
çalismalariniz için tesekkür ederim vermis oldugunuz kodu aldim siteme yüklemeye çalisiyorum konu ile ilgili teknik bir sorun yasarsam size ulasabilecegim bir numara varmi acaba tesekkürler
writing Zülküf Küçüközer writing 7th December 2013
Merhaba, Telefon ile destek veremem ama mail ile belki yardimci olabilirim.
writing halukibrahim writing 6th January 2014
selam burada vermis oldugunuz kodlar google'un blogspot sitelerinde çalirmi aceba ? php yaziyor sanirim çalismaz ama emin olmak için sordum çok fazla bilgim olmadigi için
writing Irmak writing 24th February 2014
Anlamadigim bise niye iki kere veritabanina baglaniyor ? Vede ben baska sayfada veritabanina baglansam con degiskenlerini nasil yapacagim
writing Sehriban writing 9th May 2014
Merhaba verdiginiz linki sitemin indexine kopyaladim ama calistiramadim...Calistirmak icin ve su tabloyu görebilmek icin herhangi bir sayfa acmam gerekiyor mu, yada ne yapmam gerekiyor...tesekkürler
writing ihsan özbas writing 11th April 2015
çok iyi bir paylasim olmus tesekkürler
writing kamil özbas writing 11th April 2015
iyi bir paylasim olmus tesekkürler
writing ASkin writing 15th October 2015
Irmak farkli bir sayfada çalistirmak istersen mysql baglantisini farkli bir sayfada yaparsin sonra include ile hangi sayfada çalistirmak istersen o sayfaya çagirir ve çalistirirsin.