Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olha eu aqui denovo :P
Bom, hoje vou ensinar (pelo menos tentar) a fazer um simples contador de visitas unicas utilizando um arquivo de texto (ou php)...
"Ou php" porque com o arquivo de texto as pessoas poderão acessar o arquivo que ficam armazenado os IPs e visualizar tudo, isso com certeza é desagradavel, por isso o também tem o script para download que armazena os IPs num arquivo php que impede a visualização dos IPs =D
O codigo é auto explicativo, você pode ir lendo os comentarios para entender ^^
// CONTADOR UTILIZANDO ARQUIVO TXT
visitas.class.php
<?php
class visitas {
public $num_visitas;
public function __construct (){
// Pegamos o IP do visitante
$ip = getenv('REMOTE_ADDR');
// Esta variavel será usada para que caso o IP ja exista ela receba outro valor, assim nao cadastrará o IP novamente
$existe = 0;
// O nome do arquivo que ficará guardado os IPs
$arquivoVi = "visitas.txt";
// Abrimos o arquivo posicionando o ponteiro ao final do arquivo
$arquivo = fopen($arquivoVi,"a");
// Inserimos cada linha do arquivo num array
$file = file($arquivoVi);
// Contamos quantos existem
$total = count($file); for ($i=0;$i<$total;$i++){
// Se existir a variavel $existe terá o valor 1
if ($file[$i] == "$ip
") $existe = 1;
}');
fclose($arquivo);
// Contamos quantos indices existem
$this->num_visitas = count(file($arquivoVi));
}
}
?><?php
include "visitas.class.php";
$visitas = new visitas();
echo $visitas->num_visitas;
?>
Agora basta inserir o seguinte codigo na pagina que quiser para aparecer o numero de visitas em seu site:
<?php include "contador/total_visitas.php"; ?>
Ai esta o codigo utilizando texto, agora o codigo utilizando php, não há muitas diferenças entre eles....
// CONTADOR UTILIZANDO ARQUIVO PHP
visitas.class.php
<?php
class visitas {
public $num_visitas;
public function __construct (){
// Pegamos o IP do visitante
$ip = getenv('REMOTE_ADDR');
// Esta variavel será usada para que caso o IP ja exista ela receba outro valor, assim nao cadastrará o IP novamente
$existe = 0;
// O nome do arquivo que ficará guardado os IPs
$arquivoVi = "visitas.php";
// Abrimos o arquivo posicionando o ponteiro ao final do arquivo
$arquivo = fopen($arquivoVi,"a");
// Inserimos cada linha do arquivo num array
$file = file($arquivoVi);
// Contamos quantos existem
$total = count($file); for ($i=0;$i<$total;$i++){
// Se existir a variavel $existe terá o valor 1
if ($file[$i] == "$ip
") $existe = 1;
}');
fclose($arquivo);
// Contamos quantos indices existem (o -1 foi colocado ai por causa do codigo php que ocupa uma linha)
$this->num_visitas = count(file($arquivoVi)) - 1;
}
}
?><?php if (!define("contador_visitas")) exit (); ?>
total_visitas.php
<?php
include "visitas.class.php";
$visitas = new visitas();
echo $visitas->num_visitas;
?>
Agora basta inserir o seguinte codigo na pagina que quiser para aparecer o numero de visitas em seu site:
<?php include "contador/total_visitas.php"; ?>
Bom é isso ai =) Abaixo os scripts para download
Contador txt: http://rapidshare.com/files/222194832/contador.rar.html
Contador php: http://rapidshare.com/files/222195045/contador.rar.html (recomendado)
Olá, infelizmente o arquivo está gravando o IP do meu servidor aonde está instalado o meu site e não o IP do Visitante...
Como Arrumar?
Att
Tulio.
Fiz todo o procedimento, salve na pasta contador. como está o Iframe, mas o contador não roda. O que poderia ser?
Os arquivos
**visitas.class.php
visitas.php**
devem ficar no diretório aonde seu site está instalado...
crie uma tabela no banco de dados com o nome visitas, insira os campos id int autoincrement, ip varchar 50, visitas varchar 50, coloque o seguinte codigo na sua pagina logo no inicio de todo seu script, e lá em baixo dá um echo na variavel visitas testa ai pra ver se dá certo, aqui não deu nenhum erro
<?php
include "conexao.php";
$ip = getenv("REMOTE_ADDR");
$sql_seleciona = "SELECT * FROM visitas where ip = :ip";
try{
$query_seleciona = $conecta->prepare($sql_seleciona);
$query_seleciona->bindValue(':ip',$ip,PDO::PARAM_STR);
$query_seleciona->execute();
$contar = $query_seleciona->fetchAll(PDO::FETCH_ASSOC);
}catch(PDOexception $error_seleciona){
echo 'erro ao contar registros '.$error_seleciona->getMessage();
}
foreach($contar as $res_contar){
$contIP = $res_contar['ip'];
}
$ip = getenv("REMOTE_ADDR");
$visitas = 1;
if($ip != $contIP){
$visitas = $visitas + 1;
$sql_seleciona = "INSERT INTO visitas (ip, visitas) values (:ip, :visitas)";
try{
$query_seleciona = $conecta->prepare($sql_seleciona);
$query_seleciona->bindValue(':ip',$ip,PDO::PARAM_STR);
$query_seleciona->bindValue(':visitas',$visitas,PDO::PARAM_STR);
$query_seleciona->execute();
$contar = $query_seleciona->rowCount(PDO::FETCH_ASSOC);
}catch(PDOexception $error_seleciona){
echo 'Erro ao inserir dados '.$error_seleciona->getMessage();
}
}else{}
echo $visitas;
?>
arquivo de conexão com o banco de dados
<?php
define("HOST", "localhost");
define("DB", "contador");
define("USER", "root");
define("PASS", "");
$conexao = 'mysql:host='.HOST.';dbname='.DB;
try{
$conecta = new PDO($conexao, USER, PASS);
$conecta->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch(PDOexception $error_conecta){
echo 'erro ao conectar'.$error_conecta->getMessage();
}
?>
crie uma tabela no banco de dados com o nome visitas, insira os campos id int autoincrement, ip varchar 50, visitas varchar 50, coloque o seguinte codigo na sua pagina logo no inicio de todo seu script, e lá em baixo dá um echo na variavel visitas testa ai pra ver se dá certo, aqui não deu nenhum erro
<?php
include "conexao.php";
$ip = getenv("REMOTE_ADDR");
$sql_seleciona = "SELECT * FROM visitas where ip = :ip";
try{
$query_seleciona = $conecta->prepare($sql_seleciona);
$query_seleciona->bindValue(':ip',$ip,PDO::PARAM_STR);
$query_seleciona->execute();
$contar = $query_seleciona->fetchAll(PDO::FETCH_ASSOC);
}catch(PDOexception $error_seleciona){
echo 'erro ao contar registros '.$error_seleciona->getMessage();
}
foreach($contar as $res_contar){
$contIP = $res_contar['ip'];
}
$ip = getenv("REMOTE_ADDR");
$visitas = 1;
if($ip != $contIP){
$visitas = $visitas + 1;
$sql_seleciona = "INSERT INTO visitas (ip, visitas) values (:ip, :visitas)";
try{
$query_seleciona = $conecta->prepare($sql_seleciona);
$query_seleciona->bindValue(':ip',$ip,PDO::PARAM_STR);
$query_seleciona->bindValue(':visitas',$visitas,PDO::PARAM_STR);
$query_seleciona->execute();
$contar = $query_seleciona->rowCount(PDO::FETCH_ASSOC);
}catch(PDOexception $error_seleciona){
echo 'Erro ao inserir dados '.$error_seleciona->getMessage();
}
}else{}
echo $visitas;
?>
arquivo de conexão com o banco de dados
<?php
define("HOST", "localhost");
define("DB", "contador");
define("USER", "root");
define("PASS", "");
$conexao = 'mysql:host='.HOST.';dbname='.DB;
try{
$conecta = new PDO($conexao, USER, PASS);
$conecta->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch(PDOexception $error_conecta){
echo 'erro ao conectar'.$error_conecta->getMessage();
}
?><?php
include "conexao.php";
$ip = getenv("REMOTE_ADDR");
$sql_seleciona = "SELECT * FROM visitas where ip = :ip";
try{
$query_seleciona = $conecta->prepare($sql_seleciona);
$query_seleciona->bindValue(':ip',$ip,PDO::PARAM_STR);
$query_seleciona->execute();
$contar = $query_seleciona->fetchAll(PDO::FETCH_ASSOC);
}catch(PDOexception $error_seleciona){
echo 'erro ao contar registros '.$error_seleciona->getMessage();
}
foreach($contar as $res_contar){
$contIP = $res_contar['ip'];
}
$ip = getenv("REMOTE_ADDR");
$visitas = 1;
if($ip != $contIP){
$visitas = $visitas + 1;
$sql_inserirVisitas = "INSERT INTO visitas (ip, visitas) values (:ip, :visitas)";
try{
$query_inserirVisitas = $conecta->prepare($sql_inserirVisitas);
$query_inserirVisitas->bindValue(':ip',$ip,PDO::PARAM_STR);
$query_inserirVisitas->bindValue(':visitas',$visitas,PDO::PARAM_STR);
$query_inserirVisitas->execute();
$contar = $query_inserirVisitas->rowCount(PDO::FETCH_ASSOC);
}catch(PDOexception $error_inserirVisitas){
echo 'Erro ao inserir dados '.$error_inserirVisitas->getMessage();
}
}else{}
$sql_seleciona = 'SELECT * FROM visitas';
try{
$query_seleciona = $conecta->prepare($sql_seleciona);
$query_seleciona->execute();
$resultado_query = $query_seleciona->fetchAll(PDO::FETCH_ASSOC);
$count = $query_seleciona->rowCount(PDO::FETCH_ASSOC);
}catch(PDOexception $error_seleciona){
echo 'Erro ao selecionar visitas '.$error_seleciona->getMessage();
}
foreach($resultado_query as $res_count){
$visitas = $res_count['visitas'];
}
echo $visitas;
?>
Fiz todo o procedimento, salve na pasta contador. como está o Iframe, mas o contador não roda. O que poderia ser?