initializeFiles(); $this->loadUniqueIPs(); } private function initializeFiles() { if (!file_exists($this->counter_file)) { file_put_contents($this->counter_file, '0'); } if (!file_exists($this->ip_file)) { file_put_contents($this->ip_file, ''); } } private function loadUniqueIPs() { if (file_exists($this->ip_file)) { $ips = file($this->ip_file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $this->unique_ips = $ips ?: []; } } private function getClientIP() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) { return $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { return $_SERVER['HTTP_X_FORWARDED_FOR']; } else { return $_SERVER['REMOTE_ADDR']; } } public function countVisitor() { $client_ip = $this->getClientIP(); $is_unique = !in_array($client_ip, $this->unique_ips); // Always increment total visits $total_count = (int)file_get_contents($this->counter_file); $total_count++; file_put_contents($this->counter_file, $total_count); // If unique visitor, add to IP list if ($is_unique) { $this->unique_ips[] = $client_ip; file_put_contents($this->ip_file, $client_ip . PHP_EOL, FILE_APPEND); } return [ 'total_visits' => $total_count, 'unique_visitors' => count($this->unique_ips), 'is_unique' => $is_unique ]; } public function displayCounter($format = 'simple') { $stats = $this->countVisitor(); switch ($format) { case 'detailed': return "
Total Visits: " . number_format($stats['total_visits']) . "
Unique Visitors: " . number_format($stats['unique_visitors']) . "
"; case 'badge': return "👁️ " . number_format($stats['total_visits']) . " visits"; default: return "Visitors: " . number_format($stats['total_visits']); } } } // Usage $counter = new VisitorCounter(); echo $counter->displayCounter('simple'); // Change to 'detailed' or 'badge' as needed ?>