Elazığ GRANİT TAŞ BEGONİT KÜPTAŞ BEGONİT KÜPTAŞ DO
Elazığ GRANİT TAŞ BEGONİT KÜPTAŞ BEGONİT KÜPTAŞ DO
Elazığ GRANİT TAŞ BEGONİT KÜPTAŞ BEGONİT KÜPTAŞ DO

Elazığ GRANİT TAŞ BEGONİT KÜPTAŞ BEGONİT KÜPTAŞ DO

Bireysel ÜYE

Üyelik Tarihi: 25 Şubat 2024

Elazığ GRANİT TAŞ BEGONİT KÜPTAŞ BEGONİT KÜPTAŞ DO adlı kullanıcının 4 ilanı mevcut.
* * - Günlük ve toplam ziyaret sayar * - 24 saat içinde aynı ziyaretçiyi tekrar saymaz (cookie) * - Basit bot filtreleme (User-Agent kontrolü) * - Güvenli dosya yazımı için flock() kullanır */ declare(strict_types=1); // Sayaç verisinin tutulacağı dosya (web kullanıcısı yazabilir olmalı) $dataFile = __DIR__ . '/counter-data.json'; // Basit bot filtresi (User-Agent) $ua = $_SERVER['HTTP_USER_AGENT'] ?? ''; $isBot = (bool) preg_match('/bot|spider|crawl|slurp|fetch|crawler|mediapartners/i', $ua); if ($isBot) { // Botları sayma ama yine de mevcut sayıları gösterebiliriz. echo renderCounter(readCounts($dataFile)); return; } // 24 saatlik tekil ziyaret için cookie $cookieName = 'site_counter_seen'; $hasSeen = isset($_COOKIE[$cookieName]); // Sayaç verisini oku/güncelle $counts = readCounts($dataFile); if (!$hasSeen) { $counts = incrementCounts($dataFile, $counts); // 24 saat boyunca tekrar sayma setcookie($cookieName, '1', [ 'expires' => time() + 86400, 'path' => '/', 'secure' => isset($_SERVER['HTTPS']), 'httponly' => true, 'samesite' => 'Lax', ]); } // HTML çıktı (isterseniz stilini değiştirin) echo renderCounter($counts); /** ----------------- Yardımcı Fonksiyonlar ----------------- */ function readCounts(string $file): array { if (!is_file($file)) { // Varsayılan yapı return [ 'total' => 0, 'daily' => [ date('Y-m-d') => 0, ], 'updatedAt' => time(), ]; } $json = @file_get_contents($file); if ($json === false) { return ['total' => 0, 'daily' => [date('Y-m-d') => 0], 'updatedAt' => time()]; } $data = json_decode($json, true); if (!is_array($data)) { $data = ['total' => 0, 'daily' => [], 'updatedAt' => time()]; } // Bugünün anahtarı yoksa ekle $today = date('Y-m-d'); if (!isset($data['daily'][$today])) { $data['daily'][$today] = 0; } return $data; } function incrementCounts(string $file, array $counts): array { $today = date('Y-m-d'); // Dosyayı aç/kilitle $dir = dirname($file); if (!is_dir($dir)) { @mkdir($dir, 0775, true); } $fp = @fopen($file, 'c+'); if (!$fp) { // Yazamıyorsak bellekte artırıp gösterelim $counts['total']++; $counts['daily'][$today] = ($counts['daily'][$today] ?? 0) + 1; $counts['updatedAt'] = time(); return $counts; } // Özel: başka bir süreç yazarken yarış olmasın diye kilit if (flock($fp, LOCK_EX)) { // Güncel içeriği tekrar oku (bu arada değişmiş olabilir) $current = stream_get_contents($fp); if ($current !== false && $current !== '') { $data = json_decode($current, true); if (is_array($data)) { $counts = $data + $counts; // eksik anahtarları koru if (!isset($counts['daily'][date('Y-m-d')])) { $counts['daily'][date('Y-m-d')] = 0; } } } // Artır $counts['total'] = (int)($counts['total'] ?? 0) + 1; $counts['daily'][$today] = (int)($counts['daily'][$today] ?? 0) + 1; $counts['updatedAt'] = time(); // Baştan yaz ftruncate($fp, 0); rewind($fp); fwrite($fp, json_encode($counts, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); return $counts; } function renderCounter(array $counts): string { $today = date('Y-m-d'); $total = number_format((int)($counts['total'] ?? 0), 0, ',', '.'); $todayCount = number_format((int)($counts['daily'][$today] ?? 0), 0, ',', '.'); // Basit, erişilebilir bir küçük footer bloğu return << Bugün: {$todayCount} Toplam: {$total}
HTML; }