119 lines
No EOL
3.3 KiB
PHP
119 lines
No EOL
3.3 KiB
PHP
<?php
|
|
$visitsFile = "visits.json";
|
|
|
|
// Check if the cookie exists to track if the visitor has been here before
|
|
$cookieName = "EIJT";
|
|
$cookieLifetime = 60 * 60 * 24 * 30; // Cookie valid for 30 days
|
|
$firstVisit = !isset($_COOKIE[$cookieName]);
|
|
|
|
// Get user-agent for browser and OS info
|
|
$userAgent = $_SERVER["HTTP_USER_AGENT"];
|
|
$browser = "Unknown Browser";
|
|
$os = "Unknown OS";
|
|
|
|
// Detect browser using simple substr checks
|
|
if (strpos($userAgent, "Firefox") !== false) {
|
|
$browser = "Firefox";
|
|
} elseif (strpos($userAgent, "Chrome") !== false) {
|
|
$browser = "Chrome";
|
|
} elseif (strpos($userAgent, "Safari") !== false) {
|
|
$browser = "Safari";
|
|
} elseif (strpos($userAgent, "Edge") !== false) {
|
|
$browser = "Edge";
|
|
} elseif (
|
|
strpos($userAgent, "MSIE") !== false ||
|
|
strpos($userAgent, "Trident") !== false
|
|
) {
|
|
$browser = "Internet Explorer";
|
|
}
|
|
|
|
// Detect operating system
|
|
if (strpos($userAgent, "Windows NT") !== false) {
|
|
$os = "Windows";
|
|
} elseif (strpos($userAgent, "Macintosh") !== false) {
|
|
$os = "macOS";
|
|
} elseif (strpos($userAgent, "Linux") !== false) {
|
|
$os = "Linux";
|
|
} elseif (strpos($userAgent, "Android") !== false) {
|
|
$os = "Android";
|
|
} elseif (strpos($userAgent, "iPhone") !== false) {
|
|
$os = "iOS";
|
|
}
|
|
|
|
// Open the file in read/write mode, creating it if it doesn't exist
|
|
$fp = fopen($visitsFile, "c+");
|
|
if ($fp === false) {
|
|
die("Error opening the file.");
|
|
}
|
|
|
|
// Lock the file to avoid race conditions
|
|
if (flock($fp, LOCK_EX)) {
|
|
// Read the file content to get the stats
|
|
$data = fgets($fp); // Read the entire file content (assuming one line per file)
|
|
if ($data) {
|
|
$stats = json_decode($data, true);
|
|
} else {
|
|
$stats = [
|
|
"total_visits" => 0,
|
|
"unique_visits" => 0,
|
|
"last_visit" => null,
|
|
"monthly" => [],
|
|
"weekly" => [],
|
|
"browsers" => [],
|
|
"operating_systems" => [],
|
|
];
|
|
}
|
|
|
|
// Increment the total visit count
|
|
$stats["total_visits"]++;
|
|
|
|
// If it's a new visitor, increase the unique visit count
|
|
if ($firstVisit) {
|
|
$stats["unique_visits"]++;
|
|
setcookie($cookieName, "1", time() + $cookieLifetime, "/"); // Set cookie for this user
|
|
}
|
|
|
|
// Update the last visit timestamp
|
|
$timestamp = time();
|
|
$stats["last_visit"] = $timestamp;
|
|
|
|
// Track by week and month
|
|
$week = date("W", $timestamp); // Week number (ISO 8601 format)
|
|
$month = date("Y-m", $timestamp); // Month in YYYY-MM format
|
|
|
|
// Increment weekly stats
|
|
if (!isset($stats["weekly"][$week])) {
|
|
$stats["weekly"][$week] = 0;
|
|
}
|
|
$stats["weekly"][$week]++;
|
|
|
|
// Increment monthly stats
|
|
if (!isset($stats["monthly"][$month])) {
|
|
$stats["monthly"][$month] = 0;
|
|
}
|
|
$stats["monthly"][$month]++;
|
|
|
|
// Track browser type
|
|
if (!isset($stats["browsers"][$browser])) {
|
|
$stats["browsers"][$browser] = 0;
|
|
}
|
|
$stats["browsers"][$browser]++;
|
|
|
|
// Track operating system
|
|
if (!isset($stats["operating_systems"][$os])) {
|
|
$stats["operating_systems"][$os] = 0;
|
|
}
|
|
$stats["operating_systems"][$os]++;
|
|
|
|
// Write the updated stats back to the file
|
|
fseek($fp, 0);
|
|
fwrite($fp, json_encode($stats));
|
|
fflush($fp);
|
|
|
|
// Unlock the file
|
|
flock($fp, LOCK_UN);
|
|
}
|
|
|
|
// Close the file
|
|
fclose($fp);
|
|
?>
|