Motori visitano il mio sito e il db segna il conteggio

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Questo codice memorizza il numero di visite che fanno gli utenti al mio sito, però mi sono accorto che nel database si memorizzano anche le visite che fanno i motori di ricerca e anche Facebook. Vorrei modificare il codice in modo che il db registri solo gli utenti.

PHP:
<?php
//Mette i dati nel DB e aumenta il contatore ad ogni visita
function contatore($pagina) { 
//RICORDA di memorizzare l'url http://gruppoalveo.altervista.org/cookie.php +invio IN TUTTI I BROWSERs
if (empty($_COOKIE["contavisite"])) { //Richiama il cookie che c'è in cookie.php
  $continua = false; 
  if (isset($_SERVER['HTTP_REFERER']) != "") {
  $from = parse_url($_SERVER['HTTP_REFERER']);
  $from = $from['host'];
}
else {
  $from = "";
} 
$whitelist = array( 
/*Qui scrivi l'url del sito in modo che quando l'utente vi arriva DA TERZI, anche se digita con le pagine, il contatore non sale.
Se poi è nel mio sito e ci clicca su, ovviamente il contatore nel db sale*/
"www.gruppoalveo.altervista.org", //Scrivi gli url senza http://
"gruppoalveo.altervista.org",
"www.gruppoalveo.it",
"gruppoalveo.it"
  ); 
  foreach ($whitelist as $sito) { 
    if ($from == $sito) $continua = true; 
  } 
 if ($continua) { 
    $data_localeS=time();
    $mysqli = new mysqli("localhost", "gruppoalveo", "pwd", "my_gruppoalveo");    
    $giorno=array('Dom','Lun','Mar','Mer','Gio','Ven','Sab'); 
    $mese=array('gen','feb','mar','apr','mag','giu','lug','ago','set','ott','nov','dic');
    $dataGmtS=$giorno[date('w')].' '.date('d').' '.$mese[date('m')-1].' '.date('Y - H:i:s');
    $ip=$_SERVER['REMOTE_ADDR']; 
    $url = $_SERVER['PHP_SELF']; 
    $esiste = $mysqli->query ("SELECT * FROM visitate WHERE url='$url'"); 
    if ($esiste->num_rows == 0) { 
       $visite = 1;  
       $mysqli->query ("INSERT INTO visitate(data_localeS, dataGmtS, pagina, url, visite, ip) 
                                VALUES ('$data_localeS', '$dataGmtS', '$pagina', '$url', '$visite', '$ip')");       
       }
       else { 
      $old = $esiste->fetch_array(MYSQLI_ASSOC);   
      $visite = $old['visite'] + 1; 
      $mysqli->query("UPDATE visitate SET data_localeS='$data_localeS', dataGmtS='$dataGmtS', pagina='$pagina', visite='$visite', ip='$ip' WHERE url='$url'"); 
    } 
  } 
}   
}
//Estrae i dati dal DB e crea la sequenza delle pagine più viste  
$mysqli = new mysqli("localhost", "gruppoalveo", "pwd", "my_gruppoalveo");  
   $pag_viste = $mysqli->query("SELECT * FROM visitate ORDER BY visite DESC LIMIT 0,7"); //Visualizza il numero di items
  if ($pag_viste->num_rows > 0) {
    echo "<div class=\"menuVisti\">";
    while ($link = $pag_viste->fetch_array(MYSQLI_ASSOC)) {  
    echo "<div class=\"numeroVisite\">".$link["visite"]." volte</div>";  
    echo "<a class=\"visti\" href='".$link['url']."'>&bull;&nbsp;&nbsp;&nbsp;".$link['pagina']."</a>";
    }
  echo "</div>";
  }

error_reporting (E_ALL); 
?>
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, puoi verificare il contenuto della variabile $_SERVER["HTTP_USER_AGENT"] per identificare se appartiene ad un motore di ricerca
questo è uno degli agent che rilasciano gli spider di google
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
PHP:
    if (strpos($_SERVER["HTTP_USER_AGENT"], "bot")) {
     // non fai l'insert
    }
In genere trovi sempre all'interno la parola bot ( forse c'è qualche eccezione )
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Ciao, puoi verificare il contenuto della variabile $_SERVER["HTTP_USER_AGENT"] per identificare se appartiene ad un motore di ricerca
questo è uno degli agent che rilasciano gli spider di google

PHP:
    if (strpos($_SERVER["HTTP_USER_AGENT"], "bot")) {
     // non fai l'insert
    }
In genere trovi sempre all'interno la parola bot ( forse c'è qualche eccezione )

Così va bene per tutti i motori?

PHP:
?php
//Mette i dati nel DB e aumenta il contatore ad ogni visita
function contatore($pagina) { 
//RICORDA di memorizzare l'url http://gruppoalveo.altervista.org/cookie.php +invio IN TUTTI I BROWSERs
if (empty($_COOKIE["contavisite"])) { //Richiama il cookie che c'è in cookie.php
  $continua = false; 
  if (isset($_SERVER['HTTP_REFERER']) != "") {
  $from = parse_url($_SERVER['HTTP_REFERER']);
  $from = $from['host'];
}
else {
  $from = "";
} 
$whitelist = array( 
/*Qui scrivi l'url del sito in modo che quando l'utente vi arriva DA TERZI, anche se digita con le pagine, il contatore non sale.
Se poi è nel mio sito e ci clicca su, ovviamente il contatore nel db sale*/
"www.gruppoalveo.altervista.org", //Scrivi gli url senza http://
"gruppoalveo.altervista.org",
"www.gruppoalveo.it",
"gruppoalveo.it"
  ); 
  foreach ($whitelist as $sito) { 
    if ($from == $sito) $continua = true; 
  } 
  if (strpos($_SERVER["HTTP_USER_AGENT"], "bot")) {
     // non fai l'insert
    }  
...
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
No, devi analizzare il loro agent e vedere se contengono le parole bot o crawler
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Potresti creare una funzione cosi
PHP:
function is_spider($agent) {

    $spider = array("bot", "spider", "crawler");

    foreach ($spider as $value) {
        if (strpos(strtolower($agent), $value) !== false) {
            return true;
        }
    }
    return false;
}
Nell'array puoi aggiungere tutte le parole che ti fanno capire che la stringa dell'agent appartiene ad uno spider
la richiami in questo modo
PHP:
$agent = $_SERVER["HTTP_USER_AGENT"];
if (is_spider($agent)) {
    echo "Questo Agent appartiene ad uno spider";
} else {
    echo "Questo Agent NON appartiene ad uno spider";
}
Io di solito registro tutte le visite e memorizzo anche gli agent, poi faccio la distinzione quando mostro i risultati
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Potresti creare una funzione cosi
PHP:
function is_spider($agent) {

    $spider = array("bot", "spider", "crawler");

    foreach ($spider as $value) {
        if (strpos(strtolower($agent), $value) !== false) {
            return true;
        }
    }
    return false;
}
Nell'array puoi aggiungere tutte le parole che ti fanno capire che la stringa dell'agent appartiene ad uno spider
la richiami in questo modo
PHP:
$agent = $_SERVER["HTTP_USER_AGENT"];
if (is_spider($agent)) {
    echo "Questo Agent appartiene ad uno spider";
} else {
    echo "Questo Agent NON appartiene ad uno spider";
}
Io di solito registro tutte le visite e memorizzo anche gli agent, poi faccio la distinzione quando mostro i risultati

A me non interessa memorizzarli, io li voglio escludere a priori, ho trovato anche questa lista però non trovo quello di facebook. http://www.useragentstring.com/pages/useragentstring.php

Così può andare?

PHP:
if (strpos($_SERVER["HTTP_USER_AGENT"], "bot, sistrix, slurp, bingbot")) { 
}
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
La funzione strpos() lavora solo su una stringa, devi usare un ciclo come ti ho mostrato nella funzione
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Il mio è un esempio, logicamente devi adattarlo al tuo script
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Il mio è un esempio, logicamente devi adattarlo al tuo script

L'ho messo così però non so se va bene, eppoi che me ne faccio di quegli echo?

PHP:
<?php
//Mette i dati nel DB e aumenta il contatore ad ogni visita
function contatore($pagina) { 
if (empty($_COOKIE["contavisite"])) { //Richiama il cookie che c'è in cookie.php
  $continua = false; 
  if (isset($_SERVER['HTTP_REFERER']) != "") {
  $from = parse_url($_SERVER['HTTP_REFERER']);
  $from = $from['host'];
}
else {
  $from = "";
} 
$whitelist = array( 
/*Qui scrivi l'url del sito in modo che quando l'utente vi arriva DA TERZI, anche se digita con le pagine, il contatore non sale.
Se poi è nel mio sito e ci clicca su, ovviamente il contatore nel db sale*/
"www.gruppoalveo.altervista.org", //Scrivi gli url senza http://
"gruppoalveo.altervista.org",
"www.gruppoalveo.it",
"gruppoalveo.it"
  ); 
  foreach ($whitelist as $sito) { 
    if ($from == $sito) $continua = true; 
  } 
//Riconosce che è uno spider e non conteggia le sue visite 
function is_spider($agent) {
$spider = array("bot", "spider", "crawler", "sistrix", "slurp", "bingbot");
foreach ($spider as $value) {
 if (strpos(strtolower($agent), $value) !== false) {
return true;
  }
}
return false;
}  

$agent = $_SERVER["HTTP_USER_AGENT"];
if (is_spider($agent)) {
    echo "Questo Agent appartiene ad uno spider";
} else {
    echo "Questo Agent NON appartiene ad uno spider";
}  
if ($continua) { 
...
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Mi vien da pensare una cosa: non è più semplice mettere una funzione con questi 2 items? Nel robot.text da accesso a tutti gli spider in tutti i file e directory del sito, noi invece nella nostra funzione li blocchiamo tutti

User-agent: *
Disallow:
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Gli echo puoi toglierli
PHP:
if (is_spider($agent)) {
    // non fai niente
} else {
    if ($continua) {
        $data_localeS = time();
        $mysqli = new mysqli("localhost", "gruppoalveo", "pwd", "my_gruppoalveo");
        $giorno = array('Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab');
        $mese = array('gen', 'feb', 'mar', 'apr', 'mag', 'giu', 'lug', 'ago', 'set', 'ott', 'nov', 'dic');
        $dataGmtS = $giorno[date('w')] . ' ' . date('d') . ' ' . $mese[date('m') - 1] . ' ' . date('Y - H:i:s');
        $ip = $_SERVER['REMOTE_ADDR'];
        $url = $_SERVER['PHP_SELF'];
        $esiste = $mysqli->query("SELECT * FROM visitate WHERE url='$url'");
        if ($esiste->num_rows == 0) {
            $visite = 1;
            $mysqli->query("INSERT INTO visitate(data_localeS, dataGmtS, pagina, url, visite, ip) 
                                VALUES ('$data_localeS', '$dataGmtS', '$pagina', '$url', '$visite', '$ip')");
        } else {
            $old = $esiste->fetch_array(MYSQLI_ASSOC);
            $visite = $old['visite'] + 1;
            $mysqli->query("UPDATE visitate SET data_localeS='$data_localeS', dataGmtS='$dataGmtS', pagina='$pagina', visite='$visite', ip='$ip' WHERE url='$url'");
        }
    }
}
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Nel frattempo ti avevo mandato il post #14

Ho notato tramite l'ip che uno spider frequente è quello di Facebook, come si fa a individuarlo per inserirlo nel codice?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Non ho capito la domanda del #14 ma prova a leggere questo articolo
Non sapevo che facebook avesse degli spider, forse ti basta aggiungere nell'array la parola "facebook"
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Non ho capito la domanda del #14 ma prova a leggere questo articolo
Non sapevo che facebook avesse degli spider, forse ti basta aggiungere nell'array la parola "facebook"

Riguardo al post #14: io nella directory ho un robot.txt che permette a tutti gli spider di indicizzare tutti i miei file

User-agent: * //L'asterisco User-agent* significa "Qualunque spider può accedere", altrimenti metti solo il nome dello spider che vuoi che acceda, es: User-agent: googlebot

Disallow: //Se vuoto, vuol dire che tutte le directory ed i file saranno indicizzati dallo spider.

Disallow: / //(con la barra) vuol dire che IMPEDISCE di indicizzare qualunque cosa,
è il contrario di Disallow: (vuoto)


Perciò, se noi usiamo questo principio e lo mettiamo nel codice, tutti gli spider vengono bloccati dal contavisite
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Non saprei come convertire quei comandi in php
 
Discussioni simili
Autore Titolo Forum Risposte Data
F [Cerco][Gratuito] Collaboratori blog su tecnologia, serie tv e motori Offerte e Richieste di Lavoro e/o Collaborazione 1
I [VENDO] Aumento presenza su Google e motori di ricerca. Offerte e Richieste di Lavoro e/o Collaborazione 0
Licantropo Joomla! e i motori di ricerca SEO e Posizionamento 3
andry79fi Set di Libri per posizionamento Motori di Ricerca Altri Annunci 0
F informazione primi sui motori Leggi, Normative e Fisco 12
M Un Saluto dal Monto dei Motori Presentati al Forum 2
T Posizionamento nei motori di ricerca e funzione load di jquery SEO e Posizionamento 1
M Posizionamento motori di ricerca SEO e Posizionamento 5
Frank10 Inserire sito su google ed altri motori di ricerca SEO e Posizionamento 1
S [offro lavoro] cerco bravissimo per motori ricerca,seo,indicizzazione e altro Offerte e Richieste di Lavoro e/o Collaborazione 0
U non apparire piu nei motori di ricerca? SEO e Posizionamento 7
R Cerco software gratuito per inserire sito su motori di ricerca SEO e Posizionamento 2
J [SCAMBIO] Link + Indicizzazione vostro sito su motori di ricerca interni Offerte e Richieste di scambio links 0
A Perchè non entro nei motori di ricerca SEO e Posizionamento 3
M Cercasi esperto Seo per posizionamento su motori di ricerca Offerte e Richieste di Lavoro e/o Collaborazione 1
S Il mio sito non compare sui motori di ricerca SEO e Posizionamento 5
P Sito in Flash: inserimento nei motori di ricerca SEO e Posizionamento 6
P joomla! e migliore indicizzazione sui motori Joomla 6
B NuclearSEO - Posizionamento Sui Motori Di Ricerca Presenta il tuo Sito 0
G Per tutti quelli che usano i MOTORI DI RICERCA Discussioni Varie 2
P visualizzazione sui motori di ricerca SEO e Posizionamento 0
WorldWideWeb Ottimizzare il sito x motori di ricerca Webdesign e Grafica 6
C Assenza tra i motori di ricerca SEO e Posizionamento 5
R Motori di ricerca SEO e Posizionamento 4
M Come segnalare un sito nei motori di ricerca ? SEO e Posizionamento 0
M Quando i motori diventano passione e non solo... Presenta il tuo Sito 0
M motori di ricerca e frame Javascript 2
F PHP Include e motori di ricerca PHP 7
S [frame] motori di ricerca SEO e Posizionamento 2
B Evitare i motori di ricerca HTML e CSS 2
M Quanto costa essere primi nei motori di ricerca SEO e Posizionamento 1
lukeonweb Corso Corso Web Marketing e Motori di Ricerca SEO e Posizionamento 10
L sito con frame e motori di ricerca... SEO e Posizionamento 8
B http://www.sbafreedom.altervista.org per i motori non esistono le mie keywords Presenta il tuo Sito 2
G Visualizzare il sito sui motori di ricerca HTML e CSS 30
M Come iscriversi ai motori di ricerca ? SEO e Posizionamento 1
Filippine Motori di ricerca Svizzeri gratis SEO e Posizionamento 2
Dusy Motori di ricerca SEO e Posizionamento 1
P Framework e motori di persistenza per PHP PHP 1
E Seo Blog, news e tools per i motori di ricerca Presenta il tuo Sito 3
S Non compaio sui motori di ricerca SEO e Posizionamento 3
C problema con Referer e Motori di ricerca SEO e Posizionamento 1
K motori di ricerca HTML e CSS 3
F Cerco esperto motori di ricerca - Web Marketing SEO e Posizionamento 0
F Cerco esperto motori di ricerca - Web Marketing Altri Annunci 0
R far trovare il sito dai motori HTML e CSS 4
H Visualizzare le immagini nei motori HTML e CSS 1
M Iscrizione nei motori di ricerca? ora è più facile! SEO e Posizionamento 0
F motori di ricerca... perchè??? HTML e CSS 1
Apeweb Iscrivere un sito nei Motori di Ricerca SEO e Posizionamento 4

Discussioni simili