PHP ile Gerçek Zamanlı Ziyaretçi Takip Sistemi Geliştirme — SQLite / MySQL Dual-Driver Mimarisi

PHP ile Gerçek Zamanlı Ziyaretçi Takip Sistemi Geliştirme — SQLite / MySQL Dual-Driver Mimarisi

Tek dosya entegrasyonu ile profesyonel düzeyde web analitik çözümü

Giriş

Web sitesi sahiplerinin en temel ihtiyaçlarından biri, sitelerini kimlerin ziyaret ettiğini anlık olarak görmek ve analiz edebilmektir. Google Analytics gibi üçüncü parti servisler güçlü çözümler sunsa da, verilerinizin kendi sunucunuzda kalmasını istediğiniz durumlar, özel gereksinimler veya basitçe bağımsız bir çözüm arayışı sizi kendi sisteminizi geliştirmeye yönlendirebilir.

Bu makalede, PHP ile sıfırdan geliştirdiğimiz Ziyaretçi Takip Sistemi v4.0'ı inceliyoruz. Sistem; gerçek zamanlı online takip, GeoIP konum tespiti, IP engelleme, SPA uyumlu heartbeat mekanizması ve en önemlisi SQLite ile MySQL arasında kesintisiz geçiş yapabilme yeteneğine sahip bir PDO tabanlı çözümdür.

Mimari Tasarım: Dual-Driver Yaklaşımı

Sistemin en kritik tasarım kararı, veritabanı soyutlama katmanıdır. Doğrudan SQLite3 sınıfı veya mysqli kullanmak yerine, PDO (PHP Data Objects) tercih edilmiştir. Bu sayede tek bir kod tabanı ile her iki veritabanı motorunu desteklemek mümkün olmaktadır.

SQL Dialect Farklılıklarının Yönetimi

SQLite ve MySQL arasındaki SQL sözdizimi farkları, helper fonksiyonlarla soyutlanmıştır:

İşlem SQLite MySQL
Tarih karşılaştırma datetime('now','-300 seconds') DATE_SUB(NOW(), INTERVAL 300 SECOND)
Upsert INSERT OR REPLACE ON DUPLICATE KEY UPDATE
Çakışma yönetimi INSERT OR IGNORE INSERT IGNORE
Auto increment AUTOINCREMENT AUTO_INCREMENT

Bu farklılıklar dateExpr(), upsert() ve insertIgnore() gibi helper metodlarla yönetilmekte, böylece iş mantığı katmanı veritabanı motorundan tamamen bağımsız çalışmaktadır.

Konfigürasyon Yönetimi

Veritabanı seçimi data/db_config.json dosyasından okunmaktadır. Bu dosya mevcut değilse sistem otomatik olarak SQLite modunda başlar — sıfır konfigürasyon ile çalışır hale gelir. MySQL'e geçmek için admin panelinden bağlantı bilgileri girilir, test edilir ve tek tıkla geçiş yapılır.

{
    "driver": "mysql",
    "host": "localhost",
    "port": "3306",
    "database": "visitor_tracker",
    "username": "root",
    "password": "****"
}

Fallback Mekanizması

MySQL bağlantısı herhangi bir nedenle başarısız olursa (sunucu kapalı, şifre değişmiş vb.), sistem otomatik olarak SQLite'a düşer. Bu sayede site hiçbir zaman tamamen çökmez:

try {
    if ($this->driver === 'mysql') {
        $this->db = new PDO($dsn, $user, $pass, $options);
    } else {
        $this->initSQLite();
    }
} catch (PDOException $e) {
    // MySQL hata → SQLite fallback
    if ($this->driver === 'mysql') {
        $this->initSQLite();
    }
}

Gerçek Zamanlı Online Takip

Sistemin en güçlü özelliklerinden biri, ziyaretçilerin hangi sayfada olduğunu anlık olarak görebilmektir. Bu, heartbeat mekanizması ile sağlanmaktadır.

Heartbeat Nasıl Çalışır?

Ziyaretçinin tarayıcısına otomatik olarak enjekte edilen bir JavaScript kodu, her 25 saniyede bir sunucuya "hâlâ buradayım" sinyali gönderir. Bu sinyal şu bilgileri taşır:

  • Mevcut sayfa URL'si ve başlığı
  • Ekran çözünürlüğü (ilk istekte)
  • Sayfa geçişi mi yoksa kalma sinyali mi olduğu

SPA (Single Page Application) Uyumluluğu

React, Vue, Angular gibi framework'lerle yapılmış tek sayfa uygulamalarda sayfa geçişleri tam yükleme olmadan gerçekleşir. Sistem bunu yakalamak için birden fazla yöntemi dinler:

// Hash değişimi (#/sayfa)
window.addEventListener("hashchange", onRoute);

// Browser geri/ileri
window.addEventListener("popstate", onRoute);

// pushState / replaceState yakalama (React Router)
var origPush = history.pushState;
history.pushState = function() {
    origPush.apply(this, arguments);
    onRoute();
};

Veritabanı Şeması

Sistem 8 tablo kullanmaktadır ve her biri belirli bir sorumluluğa sahiptir:

Tablo Açıklama Primary Key
visitors Tekil ziyaretçiler (IP bazlı, GeoIP, tarayıcı bilgileri) ip (UNIQUE)
page_views Her sayfa görüntüleme kaydı id (AUTO_INCREMENT)
online_visitors Anlık aktif ziyaretçiler ip
daily_stats Günlük tekil ziyaretçi ve sayfa görüntüleme date
hourly_stats Saatlik trafik yoğunluğu date_hour
settings Sistem ayarları (key-value) key
admins Admin kullanıcıları id
login_attempts Brute-force koruması için giriş denemeleri id

Admin Paneli Özellikleri

Sistem, Bootstrap 5 ve Chart.js ile geliştirilmiş kapsamlı bir admin paneli içermektedir. Panel 5 ana sekmeden oluşur:

1. Dashboard

Günlük özet kartları (online sayısı, bugünkü tekil ziyaretçi, sayfa görüntüleme, toplam ziyaretçi), 7 günlük trafik grafiği ve saatlik yoğunluk çubuğu içerir. Tarayıcı, işletim sistemi, ülke ve cihaz dağılım grafikleri de bu sekmede yer alır.

2. Canlı Online

Ayarlanabilir aralıklarla (5-60 saniye) otomatik yenilenen tablo. Her ziyaretçinin IP'si, aktif sayfası, tarayıcı/cihaz bilgisi, konumu ve ne kadar süredir aktif olduğu görünür. Arama ve filtreleme desteği mevcuttur.

3. Ziyaretçiler

Tüm ziyaretçi geçmişi; sıralama, filtreleme (ülke, tarayıcı, OS, cihaz, tarih aralığı) ve CSV dışa aktarma özellikleriyle sunulur. Her ziyaretçinin detay sayfasında sayfa geçmişi, not ekleme ve IP engelleme bulunur.

4. İstatistikler

Konfigüre edilebilir zaman aralığında (7/30/90 gün) detaylı grafikler: trafik trendi, en çok ziyaret edilen sayfalar, referrer kaynakları ve coğrafi dağılım.

5. Ayarlar

Sistem konfigürasyonu, şifre değiştirme, veritabanı geçiş yönetimi (SQLite ↔ MySQL) ve özelleştirilebilir 403 engel sayfası düzenleyici (canlı HTML editör + anlık önizleme) bu sekmede yer alır.

IP Engelleme Sistemi

Sistem iki farklı engelleme modu sunmaktadır:

Mod Davranış
Erişimi Engelle Engelli IP'ye özelleştirilebilir 403 sayfası gösterilir, siteye erişim tamamen kapatılır
Sadece Takip Etme Engelli IP siteyi görebilir ancak istatistiklere dahil edilmez

403 sayfası admin panelindeki HTML editör ile tamamen özelleştirilebilir — canlı önizleme ile yazılan HTML anında görüntülenir.

Kurulum ve Entegrasyon

Kurulum son derece basittir. Dosyaları sunucuya yükleyin ve herhangi bir PHP sayfasına tek satır ekleyin:

<?php include 'visitor-tracker/visitor_tracker.php'; ?>

Bu tek satır, otomatik olarak şunları yapar:

  1. data/ klasörünü ve veritabanını oluşturur (ilk çalıştırmada)
  2. Ziyaretçiyi kaydeder ve GeoIP bilgisini çeker
  3. Sayfa görüntüleme ve istatistikleri günceller
  4. Heartbeat JavaScript'ini sayfaya enjekte eder
  5. Engelli IP kontrolü yapar (gerekiyorsa 403 gösterir)
  6. Bot tespiti ile gereksiz kayıtları filtreler

Admin paneline /visitor-tracker/admin/admin.php adresinden erişilir. Varsayılan giriş: admin / admin123 (ilk girişte değiştirmeniz önerilir).

SQLite vs MySQL: Ne Zaman Hangisi?

Kriter SQLite MySQL
Kurulum Sıfır konfigürasyon Veritabanı oluşturulmalı
Eşzamanlı erişim Tek yazıcı (WAL ile iyileştirilmiş) Tam eşzamanlı destek
Trafik kapasitesi Küçük-orta siteler Yüksek trafikli siteler
Yedekleme Tek dosya kopyala mysqldump gerekli
Taşınabilirlik Dosya kopyala çalışsın Sunucu bağımlı

Tavsiye: SQLite ile başlayın. Trafik arttığında ve SQLite kilitlenmeleri yaşamaya başladığınızda, admin panelinden tek tıkla MySQL'e geçin — verileriniz de otomatik aktarılır.

Güvenlik Önlemleri

  • Brute-force koruması: 15 dakika içinde 5 başarısız giriş denemesi sonrası IP geçici olarak engellenir
  • Şifre hashleme: password_hash() ile bcrypt
  • SQL Injection koruması: Tüm sorgular PDO prepared statements kullanır
  • XSS koruması: Tüm kullanıcı girdileri htmlspecialchars() ile escape edilir
  • Bot filtreleme: 25+ bilinen bot user-agent'ı otomatik tespit ve hariç tutma
  • Otomatik temizlik: Eski kayıtlar ayarlanan saklama süresine göre otomatik silinir

Sonuç

Bu ziyaretçi takip sistemi, tek bir include satırı ile herhangi bir PHP projesine entegre edilebilir. SQLite'ın basitliği ile başlayıp MySQL'in gücüne terfi edebilir, aradaki geçişte tek satır veri kaybetmezsiniz. Açık kaynak yapısı sayesinde ihtiyaçlarınıza göre özelleştirilebilir ve genişletilebilir.

Projenin tüm kaynak kodu iki dosyadan oluşmaktadır: visitor_tracker.php (backend motor) ve admin/admin.php (yönetim paneli). Harici bağımlılık yoktur — PHP'nin yerleşik PDO ve session desteği yeterlidir.

 

 

İndirme

Projenin son sürümünü aşağıdaki bağlantıdan indirebilirsiniz:

⬇ Ziyaretçi Takip Sistemi v4.0 İndir (ZIP)

T

Site Yöneticisi

Merhaba! Ben Ramazan, Bir yazılım geliştiricisiyim.

💬 Yorumlar (0)

İlk yorumu siz yapın!

💬 Yorum Yap