PHP Ziyaretçi Sayacı Yapımı – Sayfa Görüntülenme Sayısı Bulma

PHP Ziyaretçi Sayacı Yapımı – Sayfa Görüntülenme Sayısı Bulma

PHP ziyaretçi sayacı ve sayfa görüntülenme sayısı bulma konularına değineceğim. Ayrıca anlatacağım konuların çalışır örneğini konunun en altında link olarak ekleyeceğim. Böylece kendi bilgisayarınıza indirip inceleyebilir, geliştirebilir ve kullanabilirsiniz.

Birçok yöntemle PHP hit sayacı uygulaması yapılabilir. Kolay ve basit yöntemleri önceden gösterip daha sonra siteyi ziyaret eden kullanıcıların ip bilgilerine göre PHP hit işlemi nasıl yapılır konusuna geçelim.

Güncelleme: Anlık olarak PHP online üyeleri gösteren sayacın AJAX ile nasıl yapılabileceğini de yazının devamında ekledim. Bu örneği de sayfanın en altından indirebilir, kendinize göre düzenleyebilirsiniz.

Txt Dosyası ile Sayaç Yapımı

Sayfa görüntülendiği her seferde “sayac.txt” dosyası içerisindeki değer okunup, değeri 1 arttırılıp, yeni sayaç değeri dosyaya kaydedilecek ve sayfa görüntülenme sayısı gösterilecek. Bu şekilde sayfa görüntülenme sayısı veritabanı kullanmadan bulunabilir ama bu örneğin hiçbir kontrolü yok. Görevi sadece veritabansız sayfa görüntülenme sayısı öğrenmeyi basit hale getirmek. Genelde statik sitelerin sayfa görüntülenme sayısını bulmak için ideal ve basit bir çözüm olacaktır.

Cookie ile PHP Sayfa Görüntülenme Sayısı

Sayfa görüntülendiği sırada kullanıcının görüntülediği makaleye özgü bilgiye sahip cookie daha önceden oluşturuldu mu, oluşturulmadı mı kontrolü yapılıyor. Yani makaleyi önceden görüntülemiş mi bunu kontrol ediyoruz.

“makaleler” isminde bir tablo olduğunu ve bu tabloda ‘makale_hit’ isminde bir alanın bulunduğunu, bu alanda da makalenin görüntülenme sayısının tutulduğunu varsayalım. Eğer kullanıcı tarafından makale görüntülenmediyse o makalenin ‘makale_hit’ değerini 1 arttırıp, 1 gün boyunca kullanıcı makaleyi her ziyaret ettiğinde görüntülenme sayısının artmamasını sağlıyoruz. Bunu da PHP cookie kullanımı ile yapıyoruz. Cookie var olduğu sürece kullanıcı ne kadar makaleyi görüntülerse görüntülesin makale görüntülenme sayısı artmayacak.

Ip Adresine Göre Sayaç Yapımı

Siteye giren kullanıcıların ip adresine göre PHP hit uygulaması yapımı konusuna geçelim. Bu PHP sayaç yapımı örneğinde;

  1. Sitede online ziyaretçi sayacı, sitedeki toplam ziyaretçi sayısı, toplam sayfa görüntülenme sayısı
  2. Seçilen sayfaya göre günlük siteye giren ziyaretçi sayısı ve sayfa görüntülenme sayısı ve seçilen günde giren ziyaretçilerin ip, şehir ve siteyi kaç kere görüntülediği tıklanma sayısı
  3. Makale görüntülenme sayısı

gibi istatistik veriler gösterecek. Siteye giren kullanıcıların hangi şehirden girdiğini ise bir başka site üzerinden file_get_contents fonksiyonu kullanılarak PHP ile başka siteden veri çekme yöntemi ile bulacağız. PHP sayaç kodu ve ayrıntılarını aşağıda görebilirsiniz.

Veritabanı Tablo Görüntüleri

sayac_ip tablosu görünümü

sayac_online tablosu görünümü

sayac_toplam tablosu görünümü

makaleler tablosu görünümü

makale_analiz tablosu görünümü

index.php Dosya İçeriği

Veritabanı bağlantı ayarları, görüntü ayarlarının yapıldığı css kodları, veritabanı bağlantı ayarlarının bulunduğu “ayar.php” dosyası ve projede kullanılacak fonksiyonların bulunduğu “fonksiyon.php” dosyalarının projeye dahil etme işlemi gerçekleştiriliyor.


	
		
		
		
	
	
		

PHP Ziyaretçi Sayacı - Sayfa Görüntülenme Sayısı


ayar.php Dosya İçeriği

Veritabanı ayarlarının toplandığı dosya

fonksiyon.php Dosya İçeriği

Projede kullanılacak yardımcı fonksiyonlar ile birlikte PHP sayaç kodları içeren fonksiyonların bulunduğu dosya. Gerekli açıklamalar kod satırlarında mevcut.

(.*?)#', $content, $regs)){
			$city = $regs[1];
		}
		if($city != ''){
			return iconv('windows-1254','UTF-8',explode('lke: ',explode('-', $city)[0])[1]);
		}else{
			return 'yok';
		}
		/*$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}"));
		return $details->city?$details->city:'Lokasyon Belirlenemiyor';*/
	}
	function sayac_ayar(){
		$ip = $_SERVER['REMOTE_ADDR']; //Localhost uzerinde calistiginda ip degeri '::1' seklinde doner. Sunucuya atildiginda dogru ip degeri gosterilir.
		$zaman = time();
		$buguntarih = date('Y-m-d');
		$sure_siniri = $zaman-60*5;
		$kayit_sql = row(query('SELECT count(id) as kayit_sayisi FROM sayac_ip WHERE tarih=''.$buguntarih.'' AND ip=''.$ip.'''));
		if($kayit_sql['kayit_sayisi'] == 0){ //bugün bu ip ye sahip kullanıcı siteye girmediyse
			query('INSERT INTO sayac_ip (tarih, tiklama, ip) VALUES (''.$buguntarih.'',1,''.$ip.'')'); //bugünün tarihini ve kullancıının ip sini kaydet
			$toplam_kayit_sayisi = rows(query('SELECT id FROM sayac_toplam')); 
			if($toplam_kayit_sayisi == 0){
				query('INSERT INTO sayac_toplam(toplam_tekil,toplam_cogul) VALUES(1,1)');
			}else{
				query('UPDATE sayac_toplam SET toplam_tekil=toplam_tekil+1, toplam_cogul=toplam_cogul+1 WHERE id=1 LIMIT 1');
			}
		}else{
			query('UPDATE sayac_ip SET tiklama=tiklama+1 WHERE tarih=''.$buguntarih.'' and ip=''.$ip.'''); //bugün siteye bu kullancıı kaç kere girmiş, tıklama sayısını kaydet
			query('UPDATE sayac_toplam SET toplam_cogul=toplam_cogul+1 WHERE id=1 LIMIT 1');
		}
		query('DELETE FROM sayac_online WHERE tarih < ''.$sure_siniri.'''); //5 dakika boyunca sitede aktif olmayan kullanıcıları online listesinden (sayac_online tablosundan) çıkart
		$online_kontrol = row(query('SELECT count(id) as online_kontrol FROM sayac_online WHERE ip=''.$ip.'''));
		if($online_kontrol['online_kontrol'] == 0){ //kullanıcının ip si sayac_online tablosunda yok ise
			query('INSERT INTO sayac_online (ip, tarih) VALUES (''.$ip.'',''.$zaman.'')'); //kullanıcıyı sayac_online tablosuna ekle
		}else{
			query('UPDATE sayac_online SET tarih=''.$zaman.'' WHERE ip=''.$ip.'''); //sayac_online tablosundaki tarih alanını şu an ki zaman ile güncelle
		}
	}
	function sayac_bilgiler(){
		$buguntarih = date('Y-m-d');
		$secilen_gun = g('secilen_gun')?g('secilen_gun'):$buguntarih;
		$online_sql = row(query('SELECT count(id) as online_sayisi FROM sayac_online'));
		$online_ziyaretci_sayisi = $online_sql['online_sayisi'];
		$toplam_tc_cek = row(query('SELECT * FROM sayac_toplam WHERE id=1 LIMIT 1'));
		$toplam_tekil_sayisi = $toplam_tc_cek['toplam_tekil'];
		$toplam_cogul_sayisi = $toplam_tc_cek['toplam_cogul'];
		$secilen_gun_sql = row(query('SELECT COUNT(ip) AS ttoplam, SUM(tiklama) AS ctoplam FROM sayac_ip WHERE tarih=''.$secilen_gun .'''));
		$bugun_tekil = $secilen_gun_sql['ttoplam'];
		$bugun_cogul = $secilen_gun_sql['ctoplam'];
		?>
		

Genel Ziyaretçi Analizi

Site Online
Toplam Siteye Giren Sayısı
Toplam Sayfa Görüntülenme Sayısı

Günlük Ziyaretçi Analizi


Siteye Giren Sayısı
Sayfa Görüntülenme Sayısı

Tarihindeki Ziyaretçiler ()

':'Şehiri Göster'; ?>
Kullanıcı Ip Kullanıcı Şehir Site Görüntüleme Sayısı

Makaleler

Makale Görüntülenme Sayısı
">

makale.php Dosya İçeriği


	
		
		
	
	
		
		

">

Görüntülenme Sayısı: '.$goruntulenme_sayisi.'
'; ?>
Sayaç sayfasına gitmek için tıklayın'; ?>

style.css Dosya İçeriği

body{
	font-family: Comic Sans MS;
	background:#f9f9f9
}
input{
	padding:10px;
	box-shadow:0px 0px 1px 1px #000;
	color:#222;
	border:none;
	font-weight:bold;
	outline:none
}
input[type=submit]{
	background:#269e1e;
	box-shadow:0px 0px 1px 1px #000;
	width:100px;
	cursor:pointer;
	margin-left:10px;
	color:#fff
}
h1{
	text-align:center;
}
a{
	text-decoration:none;
	color:#00e
}
h1 a{
	text-decoration:none;
	color:#000
}

PHP ziyaretçi sayacı ve sayfa görüntülenme sayısı konularının çalışan örneğini PHPZiyaretciSayaci.rar adlı dosyayı indirerek ulaşabilirsiniz.

Jquery AJAX ile PHP Online Üyeleri Gösterme

Bu örnekte ise jquery ajax kullanımı ile PHP online üyeleri gösterme sayacının yapılışına bakacağız. Sayaçta admin olmayan aktif üyeler sıralanacaktır ve aktif olan bu üyeleri de sadece admin yetkili üyeler görebilecektir. Sayfanın en altından uygulamayı indirebilir, kendinize göre düzenleyebilirsiniz.

Veritabanında kayıtlı üyelerin şifreleri “password”. Şimdi uygulamanın yapılışına geçelim.

veritabani.php dosyası

Uygulamanın veritabanı bağlantı ayarlarını, sayaç zaman değerleri için konum olarak istanbul olarak ayarlanışını ve türkçe karakter sorunu olmaması için gerekli kodları görebilirsiniz.

index.php dosyası

Uygulamanın ana sayfası. Sayfa açılırken kullanıcı giriş yapmadıysa ‘giris.php’ dosyasına yönlendirilecek. Üyelik bilgilerini giren kullanıcılar ise bu sayfaya yönlendirilecek. Sitede aktif olan kullanıcıları her 4 saniyede bir jquery ajax ile kontrol ediyoruz ve anlık olarak sayacı görüntülüyor ve sayaç listesini güncelliyoruz.

Sayaç listesini sadece admin yetkisine sahip üyeler görebilmekte. Sayaçta listelenen üyeler ise sadece admin yetkisi bulunmayan üyeler.

Açıklamalar kod satırlarında mevcut.




	
		
		
		
		
	
	
		

Jquery AJAX ile Online Üye Getirme


Çıkış

Hoş Geldin

Normal üyesin. Bu yüzden sayacı görüntüleyemezsin. Ancak aktif olduğun yöneticiler tarafından biliniyor.
'; }else{ ?>
Online Üyeler

giris.php dosyası

Kullanıcı giriş yaptığında index.php sayfasına yönlendirilecek.

Boş Alan Kalmamalı";
		}else{
			$query = "
			SELECT * FROM user_details 
			WHERE user_email = :user_email
			";
			$statement = $connect->prepare($query);
			$statement->execute(
				array(
					'user_email' => $_POST["user_email"]
				)
			);
			$count = $statement->rowCount();
			if($count > 0){
				$result = $statement->fetchAll();
				foreach($result as $row){
					if(password_verify($_POST["user_password"], $row["user_password"])){ //sifre dogru mu
						//kullanici dogrulandi
						
						//aktif olan uye olarak veritabanina kaydini yap
						$insert_query = "
						INSERT INTO login_details (
						user_id, last_activity) VALUES (
						:user_id, :last_activity)
						";
						$statement = $connect->prepare($insert_query);
						$statement->execute(
							array(
							'user_id'  => $row["user_id"],
							'last_activity' => date("Y-m-d H:i:s", STRTOTIME(date('h:i:sa')))
							)
						);
						$login_id = $connect->lastInsertId();
						if(!empty($login_id)){
							//daha onceden aktif olan uyeler olarak veritabaninda kaydi varsa bu kaydi sil
							$delete_user_query = "
							DELETE FROM login_details WHERE user_id = :user_id AND login_details_id != :login_details_id
							";
							$delete_user = $connect->prepare($delete_user_query);
							$delete_user->execute(
								array(
									'user_id' => $row["user_id"],
									'login_details_id'  => $login_id
								)
							);
							//oturum ac
							$_SESSION["type"] = $row["user_type"];
							$_SESSION["login_id"] = $login_id;
							header("location: index.php"); //yonlendir
						}
					}else{
						$message = "";
					}
				}
			}else{
				$message = "

ajax.php dosyası

‘index.php’ sayfasından ‘ajax.php’ sayfasına her 4 saniyede bir sayaç bilgilerinin güncellenmesi ve güncel kullanıcı bilgilerinin eklenmesini sağlayan ajax post istekleri gönderilmekte.

prepare($query);
			$statement->execute(
				array(
					'last_activity'  => date("Y-m-d H:i:s", STRTOTIME(date('h:i:sa'))),
					'login_details_id' => $_SESSION["login_id"]
				)
			);
		}
		if($_POST["action"] == "fetch_data"){ //5 saniye onceye kadar aktif olan uyeleri getir
			$query = "
			SELECT login_details.user_id, user_details.user_email FROM login_details 
			INNER JOIN user_details 
			ON user_details.user_id = login_details.user_id 
			WHERE last_activity > DATE_SUB(NOW(), INTERVAL 5 SECOND) 
			AND user_details.user_type = 'user'
			";
			$statement = $connect->prepare($query);
			$statement->execute();
			$result = $statement->fetchAll();
			$count = $statement->rowCount();
			$output .= '
			
Online Üye Sayısı = '.$count.'
'; $i = 0; foreach($result as $row){ $i = $i + 1; $output .= ' '; } $output .= '
# Email
'.$i.' '.$row["user_email"].'
'; echo $output; } } ?>

Veritabanı Durumu

‘login_details’ tablosu

‘user_details’ tablosu

‘user_details’ tablosu 2

PHP online üyeleri gösterme sayaç örneğini AJAX_PHPOnlineUyeler.rar adlı dosyayı indirerek ulaşabilirsiniz.

Yorum Yap
0 Yorum yapan