Counter-Sperre für Searchbots

DeeJTwoK

Erfahrenes Mitglied
Hallo,

ich bin mir ziemlich sicher, dass der Counter auf meiner Seite zu hoch ist, weil viele Searchbots ihn hochpushen. Deshalb habe ich diese Sperre eingebaut:
PHP:
//$file is the file, whose counter is to increase in table counter_values
function counter($file) {
     //...
     $ip = getenv("REMOTE_ADDR");
     $host = gethostbyaddr($ip);

     //if the visitor is no searchbot, increase the counter
     //otherwise increase the searchhbot-counter
     if (!is_int(strpos($host,"google")) and
         !is_int(strpos($host,"yahoo")) and
         !is_int(strpos($host,"lycos")) and
         !is_int(strpos($host,"altavista")) and
         !is_int(strpos($host,"alltheweb")) and
         !is_int(strpos($host,"alexa")) and
         !is_int(strpos($host,"msn")) and
         !is_int(strpos($host,"suche.web.de")) and
         !is_int(strpos($host,"brisbane.t-online.de")))
        {
        mysql_query("UPDATE counter_values SET value = value+1 WHERE file = '$file'");
        }
     else if ($file=="index.php")
        {
        mysql_query("UPDATE counter_values SET value = value+1 WHERE file = 'index.php (Searchbots)'");
        }
     //...
}

Es wird immer nur der Counter für die normale "index.php" erhöht, bisher aber nie der Counter für den Eintrag "index.php (Searchbots)".
Entweder erkennt meine IF-Bedinung die Bots nicht richtig oder ich habe tatsächlich so viele Besucher :D
Kann mir jemand sagen, ob das funtionieren sollte, was ich da habe?

Ich habe übrigens eine IP-Sperre, daran liegts auf jeden Fall nicht ;)

MfG
Dominik
 
Ersetze mal in der IF-Bedingung das and durch or, da der searchbot wohl kaum gleichzeitig von google und yahho etc. sein kann ;)

Wie bist du überhaupt auf die Adressen gekommen?
 
Das AND ist da schon richtig, denn immerhin prueft er ob die Begriffe nicht vorkommen.
Also wenn die Addresse nicht von Google und nicht von Yahoo (usw.) ist dann soll der Counter ganz normal aktualisiert werden, wenn aber doch, dann der Suchmaschinencounter.
 
Ich finde das "and" passend! Da KEINER dieser searchbots in dem String vorkommen darf! Beim or, wird es ja quasi egal, ob einer vorkommt!

frage einfach mal mittels
PHP:
strpos($host,"google") === false || strpos($host,"yahoo") === false ...
ab. Wenn die if Anweisung true, dann Searchbot! ;)

e: Da war ich wohl zu spät :P
 
Sorry, ich sitze hier an nem Laptop, dessen Panel eine native Auflösung von 1920 * 1200 hat. Da ich nicht immer näher ans Display rutsche, um Texte zu lesen, kann man so etwas schonmal übersehen *peinlich & schäm*
 
Danke soweit schon mal!

PHP:
strpos($host,"google") === false || strpos($host,"yahoo") === false ...
Wenn die if Anweisung true, dann Searchbot! ;)
Eher nicht...
Wenn ich $host="localhost" habe, kommt da kein "google" drin vor, also liefert strpos() false, also ist ein Teil der OR-Verknüpfung schon richtig. Dann wäre ich ja mit meinem localhost ein Searchbot. :confused:

Also wenn ich statt "$host = gethostbyaddr($ip);" einfach mal sage "$host='images.google.com'" Dann erhöht er mir auch schön den Searchbot Counter.
Entweder kommen gar keine Searchbots auf meine Page oder das mit dem gethostbyaddr() funktioniert nicht.. Aber wenn ich einfach mal ein "echo $host;" raushaue, bekomme ich auch "localhost" ausgegeben. bzw. online, dann auch was mit alice und so weiter.

Ich würde sagen meine Frage hat sich hiermit erledigt.. Mal sehen ob noch jemand eine umwerfende Idee hat, ansonsten werd ich das Thema hier als erledigt markieren.

Vielen Dank trotzdem,
Dominik
 
Die Frage ist wohl eher, ob es bereits einen Datensatz mit dem Kriteruim ($file-Variablenwert) gibt, der dann auch erhöht werden kann.
Prüfe einfach, ob die Inkrementabfrage erfolgreich war (siehe mysql_affected_rows()-Funktion) und lege falls erforderlich einen neuen Datensatz an.
 
Schonmal mit str2lower versucht? Vielleicht sind die Rückgabewerte der Funktion ja groß geschrieben ...
 
Zurück