Ich habe da mal einen kleinen Overall-Counter für eine Seite programmiert und dann dachte ich, dass ich ihn doch hier mal veröffentlichen kann, vielleicht braucht ja jemand mal einen auf die Schnelle
Er funktioniert wunderbar, man kann den Zeit-Intervall für die IP-Sperre variabel einstellen. Als Standard sind 3600 Sekunden (1 Stunde) eingestellt.
Der Counter braucht 2 Tabellen in einer Datenbank.
In der einen werden die IPs gespeichert (maximal 100 dann wird der älteste Eintrag überschrieben) und in der anderen steht der Counterstand.
Man kann die Datei counter.php einfach an jeden Seitenanfang in eine PHP-Datei und beim Aufruf dieser Seite funktioniert der Counter von ganz alleine
Den Counterstand muss man dann selber noch mit einem echo; ausgeben, aber das dürfte jeder selber hinbekommen
Hier mal der Code des Counters:
<?php function db_connect() { $mysqlhost = "localhost"; # MySQL - Host $mysqluser = "xxx"; # MySQL - Benutzername $mysqlpass = "xxx"; # MySQL - Passwort $mysqlname = "xxx"; # MySQL- Datenbank @mysql_connect($mysqlhost, $mysqluser, $mysqlpass) or die ("Es konnte keine Verbindung zum Server hergestellt werden!<br> Bitte die Daten aus der Konfiguration überprüfen!"); @mysql_select_db($mysqlname) or die ("Die Datenbank <b>$dbname</b> existiert nicht!<br> Bitte die Daten aus der Konfiguration überprüfen!"); } function get_ip() { $ip = ""; if (getenv("HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP"); elseif(getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR"); elseif(getenv("REMOTE_ADDR")) $ip = getenv("REMOTE_ADDR"); else $ip = "UNBEKANNT"; return $ip; } db_connect(); #****************************** #* ANFANG | MySQL - Counter #****************************** $ip_anzahl = 100; // Die maximale Anzahl an IP-Einträgen in der Datenbank $zeit_intervall = 3600; // Die Zeit (in Sekunden) für den Zeit-Intervall $nowtime = time(); $nowip = get_ip(); $ip_menge = mysql_num_rows(mysql_query("SELECT zeitstempel FROM counter_ips")); $ip_select = mysql_query("SELECT zeitstempel FROM counter_ips WHERE ip = '$nowip' ORDER BY zeitstempel DESC LIMIT 1"); $ip_auswahl = mysql_fetch_array($ip_select); $stop = ""; if($ip_menge >= $ip_anzahl and mysql_num_rows($ip_select) == 0) { $del = mysql_query("DELETE FROM counter_ips ORDER BY zeitstempel LIMIT 1"); if($del == true) { $stop = 0; } if($nowtime - $ip_auswahl['zeitstempel'] < $zeit_intervall) { $stop = 1; } } else { if($nowtime - $ip_auswahl['zeitstempel'] < $zeit_intervall) { $stop = 1; } } if($stop != 1 or $stop == 0) { $counter_select = mysql_query("SELECT * FROM counter"); $counterstand = mysql_result($counter_select,0,1); $counterstand ++; mysql_query("UPDATE counter SET counterstand = '$counterstand'"); if(mysql_num_rows($ip_select) == 1) { mysql_query("UPDATE counter_ips SET zeitstempel = '$nowtime' ORDER BY zeitstempel DESC LIMIT 1"); } else { mysql_query("INSERT INTO counter_ips (ip, zeitstempel) VALUES ('$nowip', '$nowtime')"); } } #****************************** #* ENDE | MySQL - Counter #****************************** ?>
Der SQL-Code für die Datenbank:
CREATE TABLE counter_ips ( ip varchar(25) NOT NULL default '', zeitstempel int(25) NOT NULL default '0' ); CREATE TABLE counter ( id int(10) unsigned NOT NULL auto_increment, counterstand int(10) NOT NULL default '0', PRIMARY KEY (id) ); INSERT INTO counter VALUES (1, 0);
Bitte nicht vergessen die Daten für die MySQL-Connection zu ändern.
Beide Dateien noch im Anhang!
Viel Spaß damit
Angehängte Datei(en)
-
counter.php (2,37K)
Anzahl der Downloads: 14 -
counter_SQL_Source.txt (296bytes)
Anzahl der Downloads: 163