Blog ComercialWeb - São Paulo - SP
E-mail: [email protected]
Atualizado: 11/10/2025

Contador de visitas em PHP — arquivo e MySQL

Contador de visitas em PHP

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.

1) Contador simples com arquivo TXT (com flock)

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.

2) Contador por página com MySQL (PDO)

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;
?>
  • Garanta índice/PK em slug para performance.
  • Se houver alto tráfego, considere cache e fila para agregação assíncrona.
  • Para visitantes únicos, combine com cookies/sessão e janela de tempo.

Perguntas frequentes

Arquivo TXT ou MySQL — qual usar?
TXT é simples para baixo tráfego e contagem total. MySQL escala melhor, facilita relatórios e concorrência.
Como evitar corrupção por acessos simultâneos?
Use flock(LOCK_EX), reposicione com rewind(), ftruncate() e só então fwrite().
Como contar visitantes únicos?
Marque a visita com cookie/sessão e aplique janela de tempo (ex.: 30 min) antes de incrementar novamente.
Onde salvar o arquivo de contagem?
Idealmente fora do docroot, com permissões de escrita restritas ao usuário do servidor.
Fonte: Redação


Mais Lidos

Ferramentas úteis

Precisa gerar senhas, validar CPF/CNPJ ou criar QR Code? Acesse nossos Geradores e Validadores Online.