• Motori visitano il mio sito e il db segna il conteggio

    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.

    Siccome ho il robot.txt impostato su questo vuol dire che ogni spider può visitare le pagine, questo va bene, ma ogni volta che entrano il contavisite sale. questo voglio evitarlo.

    User-agent: *
    Disallow:

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

  • User

    PHP offre un metodo semplice che, se sfruttato bene, puo determinare se si tratta di un 'googlebot' ecc.
    Ti basterà infatti fare un controllo sulla stringa contenuta in
    [PHP]$_SERVER['HTTP_USER_AGENT'][/PHP]
    Spero di esserti stato d'aiuto.
    Saluti


  • @Akeeron said:

    PHP offre un metodo semplice che, se sfruttato bene, puo determinare se si tratta di un 'googlebot' ecc.
    Ti basterà infatti fare un controllo sulla stringa contenuta in
    [PHP]$_SERVER['HTTP_USER_AGENT'][/PHP]
    Spero di esserti stato d'aiuto.
    Saluti

    Ho messo questo codice e le visite degli spider si sono ridotte a zero tranne quella di Facebook che attraverso vari ip (finora 3) mi visita e fa salire il contavisite. Questo non so come toglierlo.

    //Riconosce che è uno spider e non conteggia le sue visite
    function is_spider($agent) {
    $spider = array("bot", "spider", "crawler", "scooter", "slurp", "ia_archiver", "Lycos", "teoma_agent", "Ask Jeeves", "mercator", "fast", "msnbot", "bingbot");
    foreach ($spider as $value) {
    if (stripos(strtolower($agent), $value) !== false) {
    return true;
    }
    }
    return false;
    }
    $agent = $_SERVER["HTTP_USER_AGENT"];
    if (is_spider($agent)) {
    }
    else {
    ...


  • User

    Per visualizzare gli IP del visitatore, sempre dall'array superglobale SERVER
    [PHP]$_SERVER['REMOTE_ADDR'][/PHP]
    Basta che, nella funzione <i>is_spider</i> crei un array di IP da non conteggiare, ad esempio in questo modo:
    [PHP]
    $bannedip = array( '1.2.3.4', '2.3.4.5', ... ); // Inserisci tutti gli IP conosciuti
    foreach( $bannedip as $check ) {
    if( !strcmp( $_SERVER['REMOTE_ADDR'], $check ))
    return true;
    }
    [/PHP]
    Questo è il modo, come detto sopra, per non conteggiare gli IP conosciuti...
    Se cerchi invece un modo per evitare che proprio facebook non effettui visite, non posso aiutarti!


  • @Akeeron said:

    Per visualizzare gli IP del visitatore, sempre dall'array superglobale SERVER
    [PHP]$_SERVER['REMOTE_ADDR'][/PHP]
    Basta che, nella funzione <i>is_spider</i> crei un array di IP da non conteggiare, ad esempio in questo modo:
    [PHP]
    $bannedip = array( '1.2.3.4', '2.3.4.5', ... ); // Inserisci tutti gli IP conosciuti
    foreach( $bannedip as $check ) {
    if( !strcmp( $_SERVER['REMOTE_ADDR'], $check ))
    return true;
    }
    [/PHP]
    Questo è il modo, come detto sopra, per non conteggiare gli IP conosciuti...
    Se cerchi invece un modo per evitare che proprio facebook non effettui visite, non posso aiutarti!

    Così funziona, ho provato col mio, ogni ip di Facebook lo inserisco, so che è lui perché qui http://whatismyipaddress.com/ip-lookup come ISP e Organization mi da Facebook

    //Riconosce che è uno spider e non li conteggia nei + Letti
    function is_spider($agent) {
    $spider = array("bot", "spider", "crawler", "scooter", "slurp", "ia_archiver", "Lycos", "teoma_agent", "Ask Jeeves", "mercator", "fast", "msnbot", "bingbot");
    //Qui metti gli ip che non vuoi vengano conteggiati nei + Letti
    $bannedip = array('31.13.99.113', '173.252.110.116', '173.252.110.119');
    foreach( $bannedip as $check ) {
    if( !strcmp( $_SERVER['REMOTE_ADDR'], $check ))
    return true;
    }
    foreach ($spider as $value) {
    if (stripos(strtolower($agent), $value) !== false) {
    return true;
    }
    }
    return false;
    }
    $agent = $_SERVER["HTTP_USER_AGENT"];
    if (is_spider($agent)) {
    }
    else {
    ...

    Fai una prova, visitami e dimmelo che ti posto il tuo l'ip camuffato, così vediamo http://www.gruppoalveo.altervista.org/