Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lucaswxp

Contador de visitas unicas (por IP) utilizando arquivo txt

Recommended Posts

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);
// _______________________________________
		// Realizamos o loop para comparar com cada linha do arquivo se o IP ja existe
		for ($i=0;$i<$total;$i++){	
		// Se existir a variavel $existe terá o valor 1				
			if ($file[$i] == "$ip
") $existe = 1;
			}
// _______________________________________
		// Caso $existe seja igual a 0 gravará o IP do visitante
			if ($existe == 0) fwrite ($arquivo,$ip . '
');
		fclose($arquivo);
		// Contamos quantos indices existem
		$this->num_visitas = count(file($arquivoVi));
	}
}
?>

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"; ?>

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);
// _______________________________________
		// Realizamos o loop para comparar com cada linha do arquivo se o IP ja existe
		for ($i=0;$i<$total;$i++){	
		// Se existir a variavel $existe terá o valor 1				
			if ($file[$i] == "$ip
") $existe = 1;
			}
// _______________________________________
		// Caso $existe seja igual a 0 gravará o IP do visitante
			if ($existe == 0) fwrite ($arquivo,$ip . '
');
		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;
	}
}
?>

arquivo visitas.php que ficará armazenado os ips

 

<?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)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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();

}


?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?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;
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.