Veja como implementar um contador de visitas em PHP de forma simples e segura. Abaixo estão duas abordagens: uma com arquivo TXT (com flock para evitar corrupção em concorrência) e outra com MySQL usando PDO.
Armazena o total de visitas em um arquivo de texto. Use pasta fora do docroot quando possível e garanta permissões de escrita.
<?php
// caminho do contador
$file = __DIR__ . '/contador.txt';
$count = 0;
if (!file_exists($file)) { file_put_contents($file, "0"); }
$fp = fopen($file, 'c+'); // cria se não existir
if ($fp) {
flock($fp, LOCK_EX); // lock exclusivo
$size = filesize($file);
if ($size > 0) {
$count = (int) fread($fp, $size);
}
$count++;
rewind($fp); ftruncate($fp, 0);
fwrite($fp, (string) $count);
fflush($fp); flock($fp, LOCK_UN); fclose($fp);
}
echo "Visitas: " . $count;
?>
Dica: Para contar apenas uma visita por sessão, guarde um flag em $_SESSION e incremente somente na primeira visualização.
Estruture os dados para registrar hits por slug de página.
-- Tabela de contagem
CREATE TABLE page_hits (
slug VARCHAR(191) PRIMARY KEY,
hits INT UNSIGNED NOT NULL DEFAULT 0
);
<?php
$pdo = new PDO('mysql:host=localhost;dbname=seu_db;charset=utf8mb4', 'user', 'pass', [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
$slug = 'contador-de-visitas'; // identifique a página
// UPSERT portable
$stmt = $pdo->prepare('INSERT INTO page_hits (slug, hits) VALUES (:s, 1) ON DUPLICATE KEY UPDATE hits = hits + 1');
$stmt->execute([':s' => $slug]);
$total = $pdo->prepare('SELECT hits FROM page_hits WHERE slug = :s');
$total->execute([':s' => $slug]);
$hits = (int) $total->fetchColumn();
echo "Visitas: " . $hits;
?>
slug para performance.flock(LOCK_EX), reposicione com rewind(), ftruncate() e só então fwrite().Precisa gerar senhas, validar CPF/CNPJ ou criar QR Code? Acesse nossos Geradores e Validadores Online.