• Home
  • Forum
  • Fare Web
  • PHP

Intercettare array ip e spider

  • Creatore Discussione Creatore Discussione Shyson
  • Data di inizio Data di inizio 21 Ott 2014
  • 1
  • 2
Succ.
1 di 2 Succ. Ultimo

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
  • 21 Ott 2014
  • #1
Questo codice non mi funziona, devo bloccare gli spider e gli ip

PHP:
//Riconosce che è uno spider e non lo conteggia nei +Letti
function is_spider($agent) {
$spider = array("googlebot", "spider", "crawler", "scooter", "yahoo! slurp", "la_archiver", "lycos", "teoma_agent", "ask jeeves", "mercator", "fast", "msnbot", "bingbot", "facebookexternalhit");
//Qui metti gli ip che non vuoi vengano conteggiati nei +Letti
$bannedip = array('192.187.100.154','107.170.(.*)','213.42.176.216','38.99.82.(.*)','162.243.(.*)','104.131.217.168');
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)) { 
}
...
 
A

Altutto

Utente Attivo
30 Set 2013
262
0
16
stubborn.altervista.org
  • 21 Ott 2014
  • #2
Ciao
Cosa non funziona?
L'ho testato con PHP 5.5.8 e non ho trovato alcun problema...
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
  • 21 Ott 2014
  • #3
Non intercettava gli ip e gli spider, li faceva passare come conteggio di visite al sito, forse ti manca tutta la pagina.

Ora ho messo così, sembra che funzioni, solo che qualcosa non quadra

PHP:
function isBot() { 
$ip = $_SERVER["REMOTE_ADDR"]; 
$agent = $_SERVER["HTTP_USER_AGENT"];
   //Alcuni ip dinamci cambia solo l'ultima parte, perciò si scrivono così, es: 107.170.56 si scrive 107.170.
    $bot = array("googlebot","spider","crawler","scooter","yahoo! slurp","la_archiver","lycos","teoma_agent","ask jeeves","mercator","fast","msnbot","bingbot","facebookexternalhit", 
    "192.187.100.154","107.170.","213.42.176.216","38.99.82.","162.243.","104.131.217.168"); 

foreach ($bot as $item) { 
    if ( stripos($agent, $item) > -1 ) { 
        return TRUE; 
 } 
    if ( stripos($ip, $item) > -1 ) { 
        return TRUE; 
    } 
} 
return FALSE; 
}

Es, se metto così, lo blocca, ho visto che lo intercetta anche se non sono uguali.


PHP:
$ip = "453.10.65"; 
    $bot = array("192.187.100.154"); 
...
 
A

Altutto

Utente Attivo
30 Set 2013
262
0
16
stubborn.altervista.org
  • 21 Ott 2014
  • #4
Sicuramente sbaglio qualcosa io, però usando (sempre con php 5.5.8) il tuo codice in questo modo:
PHP:
<?php
function isBot() { 
$ip = "453.10.65"; 
$agent = $_SERVER["HTTP_USER_AGENT"];
   //Alcuni ip dinamci cambia solo l'ultima parte, perciò si scrivono così, es: 107.170.56 si scrive 107.170.
    $bot = array("googlebot","spider","crawler","scooter","yahoo! slurp","la_archiver","lycos","teoma_agent","ask jeeves","mercator","fast","msnbot","bingbot","facebookexternalhit", 
    "192.187.100.154","107.170.","213.42.176.216","38.99.82.","162.243.","104.131.217.168"); 

foreach ($bot as $item) { 
    if ( stripos($agent, $item) > -1 ) { 
        return TRUE; 
 } 
    if ( stripos($ip, $item) > -1 ) { 
        return TRUE; 
    } 
} 
return FALSE; 
}  
$controllo = isBot();
if($controllo){echo 'è un bot';}
else{echo 'non è un bot';}
?>
Ottengo come output 'non è un bot'
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
  • 21 Ott 2014
  • #5
E' strano.

La modifica del codice era nata perché come puoi vedere nel primo post, ci sono degli ip con (.*) e questo simbolo che vuol dire "qualsiasi cosa", non veniva intercettato, es: 107.170.(.*)

Adesso sono confuso anch'io.
 
A

Altutto

Utente Attivo
30 Set 2013
262
0
16
stubborn.altervista.org
  • 21 Ott 2014
  • #6
I misteri della programmazione ahahah
Magari c'è qualche altro codice che interferisce (del tipo, con nomi di variabile uguali), potresti provare a metterlo in una pagina a parte e vedere se ti dice ancora che quell'ip appartiene ad un bot
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
  • 21 Ott 2014
  • #7
Dovresti avere la pag. per capire (che non è neanche lunga. Di base deve bloccare quelli che intercetta nell'array e il mio tramite coockie.
 
A

Altutto

Utente Attivo
30 Set 2013
262
0
16
stubborn.altervista.org
  • 21 Ott 2014
  • #8
Se ti va di postarla, provo a darle un'occhiata
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
  • 21 Ott 2014
  • #9
Tieni presente che deve bloccare me (c'è il coockie) + tutti quelli che intercetta

PHP:
<?php 

function isBot() { 
$ip = $_SERVER['REMOTE_ADDR']; 
$agent = $_SERVER["HTTP_USER_AGENT"];
   //Alcuni ip dinamci cambia solo l'ultima parte, perciò si scrivono così, es: 107.170.56 si scrive 107.170.
    $bot = array("googlebot","spider","crawler","scooter","yahoo! slurp","la_archiver","lycos","teoma_agent","ask jeeves","mercator","fast","msnbot","bingbot","facebookexternalhit", 
    "192.187.100.154","107.170.","213.42.176.216","38.99.82.","162.243.","104.131.217.168"); 

foreach ($bot as $item) { 
    if ( stripos($agent, $item) > -1 ) { 
        return TRUE; 
 } 
    if ( stripos($ip, $item) > -1 ) { 
        return TRUE; 
    } 
} 
return FALSE; 
}  

//Mette i dati nel DB e aumenta il contatore ad ogni visita 
function contatore($pagina) {  
//RICORDA di memorizzare l'url 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 mio sito in modo che quando l'utente vi arriva DA TERZI, anche se digita url +pagine, il contatore non sale. 
Se poi è nel mio sito e ci clicca su, ovviamente il contatore nel db sale*/ 
"localhost" //Scrivi gli url senza http:// 
  ); 
  foreach ($whitelist as $sito) {  
    if ($from == $sito) $continua = true;  
  }  
if ( isBot() ) { 
} 
else {  
if ($continua) {  
    $data_localeS=time(); 
    $mysqli = new mysqli("localhost", "root", "root", "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", "root", "root", "gruppoalveo");   
   $pag_viste = $mysqli->query("SELECT * FROM visitate ORDER BY visite DESC LIMIT 0,8"); //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);  
?>
 

MarcoGrazia

Utente Attivo
15 Dic 2009
853
21
28
63
Udine
www.stilisticamente.com
  • 22 Ott 2014
  • #10
Shyson, sul server dove l'hai provato tu queste due istruzioni che cosa riportano?
$ip = $_SERVER['REMOTE_ADDR'];
$agent = $_SERVER["HTTP_USER_AGENT"];

il valore di ritorno di stripos puoi confrontarlo con l'operatore ternario piuttosto che usare > -1
if ( stripos($agent, $item) === true ) {
ma nell'insieme non mi pare per quanto io guardi che ci siano errori di sorta.
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
  • 22 Ott 2014
  • #11
Ho fatto una prova con un visitatore, quando lui clicca un link, nel Database segna 2 volte per via del reindirizzamento doppio. Perciò, fino a quando Altervista non si decide a mettere un virtual host, è così. La soluzione è mettere un "tempo" di 1 secondo per posticipare l'inserimento nel database, ma non so cosa toccare.
 

MarcoGrazia

Utente Attivo
15 Dic 2009
853
21
28
63
Udine
www.stilisticamente.com
  • 22 Ott 2014
  • #12
Ma perché ti stai incasinando tanto la vita per creare un contatore?
AV lavora su virtual_host per quanto ne so, d'altronde con tutti gli utenti che ha come pensi potrebbe fare altrimenti?
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
  • 22 Ott 2014
  • #13
Purtroppo il virtual host non c'è ancora. Come posso fare per ritardare di 2 secondi l'inserimento nel db?
 

MarcoGrazia

Utente Attivo
15 Dic 2009
853
21
28
63
Udine
www.stilisticamente.com
  • 22 Ott 2014
  • #14
Ma perché devi fare una roba del genere? Perché ritardare?
Al massimo usa un lock esclusivo per ogni utente.
Che intendi tu per virtual host?
 
A

Altutto

Utente Attivo
30 Set 2013
262
0
16
stubborn.altervista.org
  • 22 Ott 2014
  • #15
Ciao,
Neanche io noto errori nel codice completo, l'ho provato anche sul mio sito hostato su altervista e funziona...
Se vuoi evitare di inserire due visite in caso di reindirizzamento, potresti usare:
PHP:
header("Location: http://example.com/paginaacuireindirizzare");
Prima del codice che inserisce le visite.
Se invece preferisci posticiparlo, potresti usare AJAX per richiamare il codice dopo alcuni millisecondi, ma temo che verrebbe qualcosa di poco preciso visto che javascript si può disattivare e l'utente potrebbe lasciare la pagina prima che il codice sia eseguito
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
  • 22 Ott 2014
  • #16
Ho messo così se lo metto prima da errore

PHP:
if ($esiste->num_rows == 0) {  
       $visite = 1;   
      header("Location: echo $_SERVER['PHP_SELF'];");
       $mysqli->query ("INSERT INTO visitate(data_localeS, dataGmtS, pagina, url, visite, ip)  
                                VALUES ('$data_localeS', '$dataGmtS', '$pagina', '$url', '$visite', '$ip')");        
}
 
A

Altutto

Utente Attivo
30 Set 2013
262
0
16
stubborn.altervista.org
  • 22 Ott 2014
  • #17
Va benissimo lì
PS: non sono sicuro, ma credo che sia
PHP:
header("Location: ".$_SERVER['PHP_SELF']);
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
  • 22 Ott 2014
  • #18
Non da più errore ma si inserisce ancora 2 volte nel db
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
  • 22 Ott 2014
  • #19
Non da più errore ma si inserisce ancora 2 volte nel db. Non si può intervenire nel db?
 
A

Altutto

Utente Attivo
30 Set 2013
262
0
16
stubborn.altervista.org
  • 22 Ott 2014
  • #20
Potresti usare un codice per rimuovere i record duplicati che sono stati inseriti in un breve intervallo di tempo
 
  • 1
  • 2
Succ.
1 di 2 Succ. Ultimo
Devi accedere o registrarti per poter rispondere.

Discussioni simili

Intercettare url nell'array e traformarlo con str_ireplace
  • Shyson
  • 28 Gen 2013
  • PHP
Risposte
0
Visite
1K
PHP 28 Gen 2013
Shyson
P
intercettare JSON array vuoto
  • paolodue
  • 20 Dic 2012
  • PHP
Risposte
0
Visite
2K
PHP 20 Dic 2012
paolodue
P
Intercettare se parola nell'array è singolare o plurale
  • Shyson
  • 11 Set 2012
  • PHP
  • 2
Risposte
21
Visite
5K
PHP 12 Set 2012
Shyson
Intercettare form solo dopo invio
  • nivaria.achinet
  • 29 Apr 2022
  • Javascript
Risposte
1
Visite
1K
Javascript 30 Apr 2022
otto9due
P
[PHP] Intercettare ed aggiornare campi di un database
  • piero60
  • 12 Set 2018
  • PHP
Risposte
5
Visite
2K
PHP 4 Ott 2018
macus_adi
A
[Javascript] intercettare errori JS
  • acweb-2004
  • 4 Apr 2018
  • Javascript
Risposte
1
Visite
1K
Javascript 8 Apr 2018
otto9due
G
[Javascript] Intercettare cambio applicazione
  • GGG
  • 1 Set 2017
  • Javascript
Risposte
0
Visite
1K
Javascript 1 Set 2017
GGG
G
L
Come intercettare un DataPicker?
  • luca1317
  • 14 Nov 2015
  • Javascript
Risposte
0
Visite
1K
Javascript 14 Nov 2015
luca1317
L
X
Intercettare cambio valore radio
  • XinYiMan
  • 31 Gen 2015
  • jQuery
Risposte
1
Visite
2K
jQuery 19 Feb 2015
criric
G
Intercettare le righe di una tabella taggate con "id"
  • giuseppeI
  • 31 Dic 2012
  • Javascript
Risposte
2
Visite
1K
Javascript 2 Gen 2013
giuseppeI
G
M
intercettare ultimo carattere stringa con PHP
  • m.pittini
  • 10 Apr 2009
  • PHP
Risposte
5
Visite
15K
PHP 11 Apr 2009
Eliox
Leggere valore da array multidimensionale a chiavi dinamiche
  • otto9due
  • 31 Dic 2023
  • PHP
Risposte
1
Visite
1K
PHP 31 Dic 2023
otto9due
M
Passaggio variabili array php su un tasto jq
  • maubox8
  • 9 Dic 2022
  • PHP
Risposte
3
Visite
1K
PHP 10 Dic 2022
maubox8
M
M
Somma inversa di Array
  • MaxFor
  • 6 Nov 2022
  • C/C++
Risposte
2
Visite
3K
C/C++ 10 Nov 2022
MaxFor
M
Iterazione array
  • MarcoGrazia
  • 26 Ott 2022
  • PHP
Risposte
5
Visite
1K
PHP 31 Ott 2022
WmbertSea
G
in_array
  • Gae
  • 17 Set 2022
  • PHP
Risposte
2
Visite
952
PHP 23 Set 2022
Gae
G
N
Passare array da php a javascript
  • Namaste!
  • 12 Lug 2022
  • PHP
Risposte
5
Visite
3K
PHP 13 Lug 2022
WmbertSea
B
  • Bloccata
Completare il seguente ciclo affinché stampi tutto l’array al contrario
  • blade744
  • 5 Giu 2022
  • PHP
Risposte
3
Visite
1K
PHP 7 Giu 2022
Max 1
G
Ordinare un array multidimensionale
  • Gae
  • 30 Apr 2022
  • PHP
Risposte
4
Visite
2K
PHP 3 Mag 2022
Gae
G
H
Errore su array associativo
  • hunter81
  • 5 Apr 2022
  • PHP
Risposte
1
Visite
1K
PHP 5 Apr 2022
WmbertSea
Condividi:
Facebook X (Twitter) LinkedIn WhatsApp e-mail Condividi Link
  • Home
  • Forum
  • Fare Web
  • PHP
  • Italiano
  • Termini e condizioni d'uso del sito
  • Policy Privacy
  • Aiuto
  • Home
Community platform by XenForo® © 2010-2024 XenForo Ltd. | Traduzione a cura di XenForo Italia
Menu
Accedi

Registrati

  • Home
  • Forum
    • Nuovi Messaggi
    • Cerca...
  • Novità
    • Featured content
    • Nuovi Messaggi
    • Ultime Attività
X

Privacy & Transparency

We use cookies and similar technologies for the following purposes:

  • Personalized ads and content
  • Content measurement and audience insights

Do you accept cookies and these technologies?

X

Privacy & Transparency

We use cookies and similar technologies for the following purposes:

  • Personalized ads and content
  • Content measurement and audience insights

Do you accept cookies and these technologies?