Auto commit: 2026-02-14T16:01:32.751Z
This commit is contained in:
parent
ad42fdfb6f
commit
3cfa9f0a7e
10
db/migrations/001_create_visitor_logs.sql
Normal file
10
db/migrations/001_create_visitor_logs.sql
Normal file
@ -0,0 +1,10 @@
|
||||
CREATE TABLE IF NOT EXISTS visitor_logs (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
ip_address VARCHAR(45) NOT NULL,
|
||||
country VARCHAR(100) DEFAULT 'Unknown',
|
||||
country_code CHAR(2) DEFAULT '??',
|
||||
last_activity TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
session_id VARCHAR(255) NOT NULL,
|
||||
INDEX (last_activity),
|
||||
INDEX (ip_address)
|
||||
);
|
||||
49
includes/tracker.php
Normal file
49
includes/tracker.php
Normal file
@ -0,0 +1,49 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/../db/config.php';
|
||||
|
||||
function track_visitor() {
|
||||
if (session_status() === PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
$ip = $_SERVER['REMOTE_ADDR'];
|
||||
$session_id = session_id();
|
||||
$db = db();
|
||||
|
||||
// Check if we already have this session tracked today
|
||||
$stmt = $db->prepare("SELECT id FROM visitor_logs WHERE session_id = ? LIMIT 1");
|
||||
$stmt->execute([$session_id]);
|
||||
$visitor = $stmt->fetch();
|
||||
|
||||
if ($visitor) {
|
||||
// Update activity
|
||||
$stmt = $db->prepare("UPDATE visitor_logs SET last_activity = CURRENT_TIMESTAMP WHERE id = ?");
|
||||
$stmt->execute([$visitor['id']]);
|
||||
} else {
|
||||
// New session, get GeoIP
|
||||
$country = 'Unknown';
|
||||
$country_code = '??';
|
||||
$lat = 0;
|
||||
$lon = 0;
|
||||
|
||||
// Simple GeoIP via API (Note: This might slow down the first request, but we only do it once per session)
|
||||
try {
|
||||
$ctx = stream_context_create(['http' => ['timeout' => 2]]);
|
||||
$geo = file_get_contents("http://ip-api.com/json/$ip", false, $ctx);
|
||||
if ($geo) {
|
||||
$data = json_decode($geo, true);
|
||||
if ($data && $data['status'] === 'success') {
|
||||
$country = $data['country'];
|
||||
$country_code = $data['countryCode'];
|
||||
$lat = $data['lat'] ?? 0;
|
||||
$lon = $data['lon'] ?? 0;
|
||||
}
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
// Silently fail if API is down
|
||||
}
|
||||
|
||||
$stmt = $db->prepare("INSERT INTO visitor_logs (ip_address, country, country_code, lat, lon, session_id) VALUES (?, ?, ?, ?, ?, ?)");
|
||||
$stmt->execute([$ip, $country, $country_code, $lat, $lon, $session_id]);
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,9 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
require_once __DIR__ . '/includes/tracker.php';
|
||||
track_visitor();
|
||||
|
||||
$projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Lili Records Radio - La mejor música en vivo.';
|
||||
$projectImageUrl = $_SERVER['PROJECT_IMAGE_URL'] ?? 'assets/images/featured.jpg';
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user