- Home
- Categorie
- Coding e Sistemistica
- PHP
- Motori visitano il mio sito e il db segna il conteggio
-
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']."'>• ".$link['pagina']."</a>"; } echo "</div>"; } error_reporting (E_ALL); ?>
-
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.
SalutiHo 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 {
...
-
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/