Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho esse script para contar os visitantes de um site:
<?php
class visita {
/*
* variaveis
**/
//Dados necessarios para verificacao de visitantes
var $ip; //armazena o ip do usuario
var $data; //armazena a data atual
/*
* construtor
**/
function visita($ip) {
//armazena na variavel 'ip' o ip do visitante atual
$this->ip=$ip;
//Pega a data atual
$this->data=date("Y-m-d");
}function verificaVisitante() {
/* Seleciona por ip e data */
$sql = mysql_query("SELECT ip, data FROM visita WHERE ip = '".$this->ip."' AND data='".$this->data."'")or die(mysql_error());
/* Verifica se a selecao feita existe, caso nao exista insere novo */
if(!mysql_num_rows($sql)>0)
$insereVisita = mysql_query("INSERT INTO visita (id,ip,data) VALUES ('','".$this->ip."','".$this->data."')");
//else print("Ja visitou");
}function imprime() {
//Chama conexao;
//Seleciona todos
$sql = mysql_query("SELECT * FROM visita");
//Conta quantos foram selecionados
$total= mysql_num_rows($sql);
//Imprime numero de visitas (registros na tabela)
print($total);
}
}$visita = new visita($_SERVER['REMOTE_ADDR']);
//Chama a funcao verificaVisitante();$visita->verificaVisitante();
?>
<?php $visita->imprime(); ?> visitantes
Isso funciona... mas o número de visitantes fica muito "irreal" pois os bots são contados juntos...
Teria algum jeito de eu contar somente os visitantes reais do site?
Obrigado
Então cara...
Eu peguei o navegador do visitante, e to salvando ele no banco de dados...
Li que em muitos bots não é detectado nenhum navegador... isso é verdade?
Se sim, eu poderia fazer algo como:
if ($navegador != null) {
//cadastra no banco de dados
}
Isso?
Acho que atravéz do gethostbyaddr você pode descobrir se é um bot.
<?php
echo gethostbyaddr("66.249.71.149");
echo "<BR>";
echo gethostbyaddr("207.46.13.48");
?>
E retornou:
>
crawl-66-249-71-149.googlebot.com
msnbot-207-46-13-48.search.msn.com
Ok, mas provavelmente existem robôs do google com vários ips... Daí tem os do yahoo, msn, bing, etc... Eu teria que procurar os ips e bloquear manualmente cada um deles?
Olha como fica no banco de dados:
id ip data navegador
1113 157.55.17.147 2012-06-07 Mozilla/5.0 (compatible; bingbot/2.0; +http://www....
1112 65.52.109.149 2012-06-07 Mozilla/5.0 (compatible; bingbot/2.0; +http://www....
1111 216.157.109.22 2012-06-07
1110 189.91.203.17 2012-06-07 Mozilla/5.0 (compatible; Googlebot/2.1; +http://ww...
1109 66.249.73.206 2012-06-07 Mozilla/5.0 (compatible; Googlebot/2.1; +http://ww...
1108 189.30.119.211 2012-06-07 Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (K...
1107 187.72.106.195 2012-06-06 Mozilla/5.0 (compatible; Googlebot/2.1; +http://ww...
1106 189.30.65.205 2012-06-06 Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/201001...
1105 66.249.73.206 2012-06-06 Mozilla/5.0 (compatible; Googlebot/2.1; +http://ww...
1104 200.146.125.43 2012-06-06 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/53...
1103 189.30.119.211 2012-06-06 Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (K...
Não teria algum outro jeito de bloquear sem ser pelo número de ip?
>
Hmm.. daí seria só bloquear esses ips? E também procurar os ips de outros robos de busca, como yahoo, bing, etc???
é, só que é melhor através do gethostbyaddr, e atravéz de alguma função de string verificar se é do googlebot.com , search.msn.com, porque provavelmente eles tem mais de um ip.
:
beleza cara, então vou tentar verificar se no gethostbyaddr($ip) tem algo escrito bot, google, msn, yahoo, bing e também no navegador, pois no banco de dados ele está salvando junto se é bot, como você pode ver no meu post!
Espero que funcione!
Volto a postar aqui daí!
Obrigado!
Fiz essa função:
function verificaVisitante() {
$verificar_bot = gethostbyaddr($this->ip);
$palavra_chave_encontrar = 'bot';
$verificar_string_bot = strpos($verificar_bot, $palavra_chave_encontrar);
if ($verificar_string_bot == false){
$verificar_navegador_bot = strpos($this->navegador, $palavra_chave_encontrar);
if ($verificar_navegador_bot == false) {
$sql = mysql_query("SELECT ip, data FROM visita WHERE ip = '".$this->ip."' AND data='".$this->data."'")or die(mysql_error());
if(!mysql_num_rows($sql)>0) {
$insereVisita = mysql_query("INSERT INTO visita (id,ip,data,navegador) VALUES ('','".$this->ip."','".$this->data."','".$this->navegador."')");
}
}
}
}
Eu acho que vai funcionar, vamos esperar ehehe
Estou usando de forma correta o strpos? Nunca tinha usado antes...
>
Fiz essa função:
function verificaVisitante() {
$verificar_bot = gethostbyaddr($this->ip);
$palavra_chave_encontrar = 'bot';
$verificar_string_bot = strpos($verificar_bot, $palavra_chave_encontrar);
if ($verificar_string_bot == false){
$verificar_navegador_bot = strpos($this->navegador, $palavra_chave_encontrar);
if ($verificar_navegador_bot == false) {
$sql = mysql_query("SELECT ip, data FROM visita WHERE ip = '".$this->ip."' AND data='".$this->data."'")or die(mysql_error());
if(!mysql_num_rows($sql)>0) {
$insereVisita = mysql_query("INSERT INTO visita (id,ip,data,navegador) VALUES ('','".$this->ip."','".$this->data."','".$this->navegador."')");
}
}
}
}
Eu acho que vai funcionar, vamos esperar ehehe
Estou usando de forma correta o strpos? Nunca tinha usado antes...
Pelo que estou vendo procura a palavra 'bot' no navegador e no $verificar_bot. Quando não tem retorna false.
Parece que ta tudo certo, já viu se funciona?
Tenta ver com o $_SERVER para ver se o visitante é robo de busca.
Atravez do ip (REMOTE_ADDR) e também o navegador 'HTTP_USER_AGENT'.
não sei se isso ajuda: http://googlewebmastercentral.blogspot.com.br/2006/09/how-to-verify-googlebot.html (tem uns ips do google)