Dacht ik veel bezoekers te hebben.....

Ik krijg erg veel bezoek van deze webcrawler:

Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)

EDIT: en deze
ichiro/2.0 (http://help.goo.ne.jp/door/crawler.html)
msnbot/1.0 (+http://search.msn.com/msnbot.htm)

Is er een mogelijkheid om dit soort webcrawlers buiten je statieken te houden. Hij gebruikt steeds een ander ip-adres.
in_array is vrij nieuw voor me.
Ik heb het volgende geprobeerd. Klopt waarschijnlijk niet maar ik heb een poging gedaan :)
De gegevens komen uit een nieuwe tabel die "geentoegang" heet.


<?php
$query = "SELECT adres,browser FROM geentoegang";
$result = mysql_query($query) or die ("Sorry maar kan de gegevens niet weergeven.");
$row = mysql_fetch_assoc($result); 

if(in_array ($_SERVER['$row->adres']) || in_array ($_SERVER['$row->browser'])){
}else{
//voer alles in de database in
}
?>
@Rolf

Bedankt!
@Elsy

Niet helemaal:

<?php
$query = "SELECT adres,browser FROM geentoegang";
$bots = array();
if($result = mysql_query($query)){
while($row = mysql_fetch_assoc($result)){
$bots[]=$row['adres'];
}
}

if(!in_array ($_SERVER['REMOTE_ADDR'], $bots)){//als het ip niet voorkomt
//voer alles in de database in
}
?>

In_array werkt als volgt:

<?php
if(in_array('gezochte_waarde', $array_variabele)){
// als gezochte_waarde voorkomt in de array $array_variabele
}
?>

[edit]
let ook op het ! voor in_array() in de voorbeeldcode (1e codeblok van de post). Je hoeft dan geen else te gebruiken, het betekend als het ip_adres niet overeenkomt met 1 van de bots, dan gaat die de if in. :) Is weer een beetje korter[/edit]
Het script werkt niet.
Hij zet mij en de bots er toch in.

Waarschijnlijk heb ik iets niet helemaal goed gedaan.

Heb ik de gegevens wel goed in de database gezet?


<?php
include("diversen.php"); 

//maak verbinding met de database
$connection = mysql_connect ($hostname,$user,$password) or die ( "Sorry maar ik kan geen contact maken met de database, probeer het later opnieuw of ververs uw browser.");
$db = mysql_select_db ($database, $connection) or die ("Sorry, maar ik kan de database niet openen.");



$queryadres = "SELECT adres FROM geentoegang";
$botsadres = array();
if($resultadres = mysql_query($queryadres)){
   while($rowadres = mysql_fetch_assoc($resultadres)){
       $botsadres[]=$rowadres['adres'];
      }
   }
   
$querybrowser = "SELECT browser FROM geentoegang";
$botsbrowser = array();
if($resultbrowser = mysql_query($querybrowser)){
   while($rowbrowser = mysql_fetch_assoc($resultbrowser)){
       $botsbrowser[]=$rowbrowser['browser'];
      }
   }

if(!in_array ($_SERVER['REMOTE_ADDR'], $botsadres) || !in_array ($_SERVER['HTTP_USER_AGENT'], $botsbrowser)){
//als het ip-adres en de browser niet voorkomt
 //voer alles in de database in
 

// Gegevens voor een nieuw logboekitem verzamelen:
$datumtijd = date("Y-m-d H:i:s");                    // Huidige datum

if (isset($_SERVER['REQUEST_METHOD'])) {   // HTTP-methode
   $methode = $_SERVER['REQUEST_METHOD'];
} else {
   $methode = NULL;
}
if (isset($_SERVER['PHP_SELF'])) {         // Huidige pagina
   $pagina = $_SERVER['PHP_SELF'];
} else {
   $pagina = NULL;
}
if (isset($_SERVER['HTTP_REFERER'])) {    // Vorige pagina
   $referer = $_SERVER['HTTP_REFERER'];
} else {
   $referer = NULL;
}
if (isset($_SERVER['REMOTE_ADDR'])) {      // Extern IP-adres
   $ip_adres = $_SERVER['REMOTE_ADDR'];
} else {
   $ip_adres = NULL;
}
if (isset($_SERVER['HTTP_USER_AGENT'])) {  // Gebruikte browser
   $browser = $_SERVER['HTTP_USER_AGENT'];
} else {
   $browser = NULL;
}

// MySQL-toevoegquery opstellen:
$sql  = "INSERT INTO `logboek` ";
$sql .= "(`logboek_id`, `datumtijd`, `methode`, `pagina`, `referer`, `adres`, `browser`) ";
$sql .= "VALUES ";
$sql .= "('', '$datumtijd', '$methode', '$pagina', '$referer', '$ip_adres', '$browser') ";
$sql .= "; ";

//maak verbinding met de database
$connection = mysql_connect ($hostname,$user,$password) or die ( "Sorry maar ik kan geen contact maken met de database, probeer het later opnieuw of ververs uw browser.");
$db = mysql_select_db ($database, $connection) or die ("Sorry, maar ik kan de database niet openen.");
mysql_query($sql) or die(mysql_error());

}
?>


@Elsy

Het probleem is dat je in je array ook lege waarden krijgt. Als je de || (OR) in de controle if() veranded in && (AND) dan moet het wel goed gaan, want dan mag zowel de user_agent als het ip niet voorkomen in de array.

[edit]
Verdere uitleg:

In je tabel heb je niet en de useragent en het ip ingevuld. Als je die in een array stopt, komen er dus ook de lege ip's of useragents in. Met de OR in je if geef je aan dat die of niet in de 1 of niet in de ander voor mag komen. Als je daar EN van maakt controleerd die zowel op IP als op USER_AGENT, nu maar op 1 van 2-en.
[/edit]
Ja, nu doet hij het volgens mij.
Nog even vervolgen vandaag.

Bedankt alvast.

Reageren