Doping Satın Alma Şartları
MEVCUT VE YAYINDA OLAN İLANLARINIZA DOPİNG ALABİLİRSİNİZ
DOPİNG İLANLARINIZIN DAHA FAZLA VE DİKKAT ÇEKİCİ BİR ŞEKİLDE GÖRÜNTÜLENMESİNE KATKIDA BULUNUR.
1.ANASAYFA VİTRİNİ
2.KATEGORİ VİTRİNİ
3.ACİL ACİL
4.KALIN YAZI
5.GÜNCELİM
ŞEKLİNDE 5 FARKLI DOPİNGİMİZ MEVCUT, İSTER BİR TANE İSTERSENİZ BEŞ TANE DOPİNG ALABİLİRSİNİZ
*
* - 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;
}