Autor |
Beitrag |
DaKirsche
Beiträge: 187
Win XP Pro, SuSe Linux 7.3 - 10.2, Win 2k3 Server, Win 2000, Win NT 4.0
Delphi 2006 Pro, Java, HTML, SQL, PHP, CSS
|
Verfasst: Mo 31.12.07 11:26
Hallo Community,
ich wollt mir einen Counter basteln für meine Webseite, also nicht für ein Programm und bin dabei jetzt auch schon so weit, dass mein Script die Zugriffe auf meine Seite zählt und auswertet.
Jedoch habe ich das Problem, dass ich plötzlich relativ viele "Besucher" auf meiner Seite habe.
Als ich noch einen Counter verwendet hatte, der von einer anderen Webseite aus eingeblendet wurde ( www.andyhoppe.com) hatte ich vll. 60 Besucher / Tag...manchmal auch mehr.
Jetzt duch mein Script gezählt habe ich jedoch schon morgens um 9 ca. 50 - 60 Besucher.
Zur Funktionsweise:
Ich frage, jedesmal, wenn das Script aufgerufen wird die IP des Besuchers und das aktuelle Datum des Servers ab und vergleiche diese mit den bereits gespeicherten Einträgen in der Datei "c_ips.txt". Sollte das Datum nicht dasselbe sein schreibe ich die Datei neu --> Besucher heute = 0!
Dann schreibe ich, wenn die IP nicht vorhanden ist, diese in die Datei hinein.
Ich schliesse jede IP mit dem Zusatz "[NIP]" ab, weil ich nach diesem String in der Datei suche, wenn ich die IPs vergleiche.
In der Datei "c_nums.txt" steht nur der Wert für "Gesamt".
Also wenn ich die IP noch nicht in der Datei habe, dann zähle ich Gesamt um 1 hoch und speicher die IP in die Datei ab.
Die Anzahl der Besucher "Heute" zähle ich aus den IP-Adressen in der Datei "c_ips.txt".
So, und nun mein Code:
Die Datei "c_nums.txt":
Quelltext
Die Datei "c_ips.txt":
Quelltext 1:
| Datum: 31.12.2007216.255.179.2[NIP]77.91.229.56[NIP]195.209.224.83[NIP]84.151.40.171[NIP]77.91.229.56[NIP]88.64.33.91[NIP]77.91.229.56[NIP]89.51.159.248[NIP]77.91.229.56[NIP]62.153.148.22[NIP]195.209.224.83[NIP]77.91.229.56[NIP]195.209.224.83[NIP]77.91.229.56[NIP]66.249.70.186[NIP]201.6.118.244[NIP]77.91.229.56[NIP]212.152.1.42[NIP]77.91.229.56[NIP]212.152.1.42[NIP]220.194.249.26[NIP]195.209.224.83[NIP]74.6.20.138[NIP]77.91.229.56[NIP]85.93.150.66[NIP]77.91.229.56[NIP]195.209.224.83[NIP]84.109.109.39[NIP]84.109.121.116[NIP]84.109.109.60[NIP]84.109.121.121[NIP]66.249.70.186[NIP]77.91.229.56[NIP]66.249.70.186[NIP]77.91.229.56[NIP]189.60.36.202[NIP]77.91.229.56[NIP]84.109.121.118[NIP]66.249.70.186[NIP]195.209.224.83[NIP]77.91.229.56[NIP]84.109.121.117[NIP]84.109.121.122[NIP]125.18.15.99[NIP]77.91.229.56[NIP]66.249.70.186[NIP]77.91.229.56[NIP]195.209.224.83[NIP]24.87.88.154[NIP]87.69.76.164[NIP]77.91.229.56[NIP]74.6.21.137[NIP]74.6.26.154[NIP]90.186.180.203[NIP] |
Und das Script "counter.php":
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90:
| <?PHP //Counterdateien definieren $counter_file = './Scripts/Counter/c_nums.txt'; $ips = './Scripts/Counter/c_ips.txt';
//prüfen, ob die Dateien existieren...wenn nicht: Dateien anlegen if (!(file_exists($counter_file))){ $fp = fopen($counter_file,'w+'); fputs($fp,0); fclose($fp); };
//heutiges Datum ermitteln $time = time(); $date = getdate ($time); $day = $date[mday]; if ($day < 10) $day = '0'.$day;
$mon = $date[mon]; if ($mon < 10) $mon = '0'.$mon;
$year = $date[year];
$a_date = $day.'.'.$mon.'.'.$year;
//IP-Liste: prüfen, ob Datei existiert, wenn nein: anlegen! if (!(file_exists($ips))){ $fp2 = fopen($ips,'w+'); fputs($fp2,'Datum: '.$a_date); fclose($fp2); };
//Inhalt des Counters und der IP-Liste in Variablen laden $counter = file_get_contents($counter_file); $iplist = file_get_contents($ips);
//Datum in IP-Liste ermitteln $date_pos = strpos($iplist,'Datum: '); $date_pos += 7; $s_date = substr($iplist,$date_pos,10);
//Prüfvariable und IP-Adresse initialisieren $is = false; $my_ip = getenv("REMOTE_ADDR");
//Wenn nicht heute: IP-Liste neu schreiben --> Counter erhöhen! if ($s_date <> $a_date){ $fp2 = fopen($ips,'w+'); fputs($fp2,'Datum: '.$a_date); fputs($fp2,$my_ip.'[NIP]'); fclose($fp2); $today=1; $counter+= 1; } else { // Wenn Datum von heute $fp2 = fopen($ips,'w+'); $a_pos=$date_pos+10; $today=0;
//IP-Liste von heute nach IP-Adresse des Clients durchsuchen --> Anzahl Besucher heute dabei zählen (1 Besucher = 1 IP) while (($a_pos + 5) < strlen($iplist)){ $ip_e = strpos($iplist,'[NIP]',$a_pos); $ip = substr($iplist,$a_pos,$ip_e); $today+= 1; $a_pos = $ip_e + 5; if (($ip == $my_ip.'[NIP]')||($ip == $my_ip)||(nl2br($ip) == '<br>'.$my_ip)||(nl2br($ip) == '<br>'.$my_ip.'[NIP]')){$is = true;}; }; //IP-Liste wieder schreiben fputs($fp2,$iplist); //Wenn neuer Besucher: IP in Liste aufnehmen --> Counter erhöhen, Hits "Heute" erhöhen if (!($is)){ fputs($fp2,$my_ip.'[NIP]'); $counter+= 1; $today+= 1; }; fclose($fp2); }; //Counter speichern $fp = fopen($counter_file,'w+'); fputs($fp,$counter); fclose($fp);
//Variablen für Ausgabe anpassen: $Besucher_heute = $today; $Besucher_gesamt = $counter; $Besucher_IP = $my_ip; ?> |
Was mache ich dabei falsch? Das Script speichert ja die IPS ab, aber manchmal jecoh doppelt und das sollte es ja nicht machen.
Kann mir jemand helfen oder nen Tipp geben?
MFG und schonmal nen guten Rutsch!
DaKirsche
_________________ Die simpelsten Fehler sind meist die Schwersten...
|
|
GTA-Place
Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Mo 31.12.07 12:35
Ohne das Script jetzt angeguckt zu haben: Ich habe auch so hohe Zugriffszahlen. Die Suchmaschinenbots haben meist mehrere IP-Adressen, dazu kommen Spam-Bots. Das macht täglich mehr als 100 "Besucher".
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
DaKirsche
Beiträge: 187
Win XP Pro, SuSe Linux 7.3 - 10.2, Win 2k3 Server, Win 2000, Win NT 4.0
Delphi 2006 Pro, Java, HTML, SQL, PHP, CSS
|
Verfasst: Mo 31.12.07 12:43
Ja, aber der vorher verwendete Counter der besagten Webseite hätte die dann doch auch mitzählen müssen, oder nicht? Oder gibt es irgendwo eine ständig sich aktualisierende Liste der Bot-IPs? Die muss man dann doch irgendwie filtern können, oder nicht?
Sowas, wie:
Quelltext 1: 2: 3: 4: 5:
| $Bot_IPs = array('111.222.111.222','123.123.123.123'.'21.231.212.1');
If (!(eregi($my_ip,$Bot_IPs))){ echo 'Kein Bot'; }; |
Oder geht das nicht?
_________________ Die simpelsten Fehler sind meist die Schwersten...
|
|
GTA-Place
Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Mo 31.12.07 13:00
Ja, gibt es: www.bot-trap.de/ Aber selbst damit hab ich noch über 100 Besucher. Das sind mittlerweile so viele Bots, die kann man nicht mehr alle aufhalten ^_^
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
DaKirsche
Beiträge: 187
Win XP Pro, SuSe Linux 7.3 - 10.2, Win 2k3 Server, Win 2000, Win NT 4.0
Delphi 2006 Pro, Java, HTML, SQL, PHP, CSS
|
Verfasst: Mo 31.12.07 13:07
hmmm..also müsste man quasi den bots den zugriff "verweigern", soweit wie es geht, was jedoch auch wiederum schlechter für die Suchmaschinen ist und die Spam-Bots lassen sich davon ja nicht beirren...
Man müsste also die Tätigkeiten des "Users" irgendwie überwachen und auswerten und wenn das dann als "normale" tätigkeit gesehen werden kann erst dann zählen...
das ist Sch...
Naja...trotzdem danke! Ich schaue mal, ob ich das irgendwie rauskriege.
Aber da bleibt im Code immer noch das Problem, dass ich manche IPs trotzdem doppelt drin habe...
_________________ Die simpelsten Fehler sind meist die Schwersten...
|
|
jakobwenzel
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: Mo 31.12.07 13:22
Die meisten Suchmaschinenbots lassen sich am user-agent erkennnen.
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
DaKirsche
Beiträge: 187
Win XP Pro, SuSe Linux 7.3 - 10.2, Win 2k3 Server, Win 2000, Win NT 4.0
Delphi 2006 Pro, Java, HTML, SQL, PHP, CSS
|
Verfasst: Do 03.01.08 12:46
Hi,
habe jetzt versuchz die Bot auszuschliessen:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| //Prüfen, ob ein Bot erkannt wird --> wenn ja: nicht zählen! $bot_typical_agents=array('http://www.google.com/bot.html','Googlebot','Beta 3','Yahoo! Slurp','msnbot.htm','LWP::Simple','ysearch/slurp','bot','robot','search'); for ($y=0;$y<sizeof($bot_typical_agents);$y++) { if (eregi($bot_typical_agents[$y],$_SERVER['HTTP_USER_AGENT'])) { $is = True; }; }; |
mal sehen, ob ich morgen weniger Besucher habe;)
aber da bleibt im Code immer noch das Problem, dass der irgendwie trotz der Abfrage manchmal IPs doppelt zählt...
Kann mir dabei jemand helfen?
_________________ Die simpelsten Fehler sind meist die Schwersten...
|
|
|