/var/www/coeditor.org/users/griffon-casino-uk.com
Edit: /var/www/coeditor.org/users/griffon-casino-uk.com/t.php (4726B)
$max_len) $str = substr($str, 0, $max_len);
return $str;
}
// ── Visitor cookie ──────────────────────────────────────────────
$vid = $_COOKIE['_vid'] ?? '';
if (!preg_match('/^[a-f0-9]{32}$/', $vid)) {
$vid = bin2hex(random_bytes(16));
setcookie('_vid', $vid, [
'expires' => time() + 365 * 86400,
'path' => '/',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax'
]);
}
$page_path = safe_str($_GET['p'] ?? '/', 500);
$referrer = safe_str($_GET['r'] ?? ($_SERVER['HTTP_REFERER'] ?? ''), 1000);
$ip = safe_str($_SERVER['REMOTE_ADDR'] ?? '', 45);
$ua = safe_str($_SERVER['HTTP_USER_AGENT'] ?? '', 500);
// ── Filter bots ─────────────────────────────────────────────────
$bot_patterns = '/bot|crawl|spider|slurp|bingpreview|mediapartners|facebookexternalhit|Googlebot/i';
if (preg_match($bot_patterns, $ua)) {
send_pixel();
}
// ── Simple rate limiting (1 write per IP per 2 seconds) ─────────
$rate_key = '/tmp/lgtrack_' . md5($ip . $domain);
if (file_exists($rate_key) && (time() - filemtime($rate_key)) < 2) {
send_pixel();
}
@touch($rate_key);
// ── Record page view ────────────────────────────────────────────
try {
if (!class_exists("SQLite3")) {
tracker_log("FATAL: SQLite3 PHP extension not loaded");
send_pixel();
}
if (!file_exists($db_path)) {
tracker_log("WARN: DB file not found: " . $db_path);
}
$db = new SQLite3($db_path);
$db->busyTimeout(5000);
$db->exec('PRAGMA journal_mode=WAL');
$db->exec('CREATE TABLE IF NOT EXISTS page_views (
id INTEGER PRIMARY KEY AUTOINCREMENT,
domain TEXT NOT NULL,
path TEXT NOT NULL,
ip TEXT,
user_agent TEXT,
referrer TEXT,
visitor_id TEXT,
created_at DATETIME DEFAULT (datetime(\'now\'))
)');
$db->exec('CREATE INDEX IF NOT EXISTS idx_pv_domain_date ON page_views(domain, created_at)');
$db->exec('CREATE INDEX IF NOT EXISTS idx_pv_visitor ON page_views(domain, visitor_id)');
$stmt = $db->prepare('INSERT INTO page_views (domain, path, ip, user_agent, referrer, visitor_id) VALUES (:d, :p, :ip, :ua, :r, :vid)');
if (!$stmt) {
tracker_log("ERROR: prepare failed: " . $db->lastErrorMsg());
$db->close();
send_pixel();
}
$stmt->bindValue(':d', $domain, SQLITE3_TEXT);
$stmt->bindValue(':p', $page_path, SQLITE3_TEXT);
$stmt->bindValue(':ip', $ip, SQLITE3_TEXT);
$stmt->bindValue(':ua', $ua, SQLITE3_TEXT);
$stmt->bindValue(':r', $referrer, SQLITE3_TEXT);
$stmt->bindValue(':vid', $vid, SQLITE3_TEXT);
$result = $stmt->execute();
if (!$result) {
tracker_log("ERROR: execute failed: " . $db->lastErrorMsg());
}
$db->close();
} catch (Exception $e) {
tracker_log("EXCEPTION: " . $e->getMessage());
}
send_pixel();