PHP Counter



Einfacher Counter mit zeitbasierter Reloadsperre. Die Informationen werden in 2 Tabellen einer MySQL Datenbank abgelegt. Zur Funktion: Die IP Adresse des Besuchers wird ermittelt und mit einer Tabelle abgeglichen. Dort sind die IP's der Besucher abgelegt. IP's älter als 6 Stunden werden aus der Tabelle entfernt. Ist die aktuelle IP noch nicht vorhanden, so wird sie mit Besuchszeit eingetragen und der Counter erhöht.

Die Tabellen:

visitors(Zeit:BigInt,IP:Text)
hits(count:Int)

Source:



<?php
//**********************************************Counter*******************************************
        mysql_connect("localhost","username","password");
        $zeit_reloadsperre=21600;               //6 Stunden Realoadsperre
        $ip_schon_da=0;                         //Flag für die Reloadsperre
        $ip_neu=getenv("REMOTE_ADDR");          //IP des Besuchers ermitteln
        $result=mysql_db_query("database","Select * from visitors");        //Tabelle Visitors auslesen
        $zeilen=mysql_Num_Rows($result);
        $zeit_aktuell=time();                   //aktuelle Zeit ermitteln
        for($i=$zeilen; $i>0; $i--)
        {
                $a=$i-1;
                $zeit_alt=mysql_Result($result,$a,"Zeit");
                if(($zeit_aktuell-$zeit_alt)>$zeit_reloadsperre)        //Zeitvergleich auf Basis von UNIX Timestamps
                {
                        //Ip Eintrag entfernen, wenn zu alt
                        mysql_db_query("database","delete from visitors where $zeit_alt=Zeit");
                }
                else
                {
                        //wenn nicht zu alt, IP vergleichen, wenn gefunden Flag setzen
                        $ip_alt=mysql_Result($result,$a,"IP");
                        if($ip_neu==$ip_alt) $ip_schon_da=1;
                }

        }
        if($ip_schon_da==0)                     //wenn IP nicht in Tabelle, dann kann Counter erhöht werden
        {
                //Hits erhöhen  
                mysql_db_query("database","update hits set count=count+1");
                //neuen Besucher eintragen
                mysql_db_query("database","insert into visitors (Zeit,IP) values ($zeit_aktuell,'$ip_neu')");
                //wenn 2 besucher zur gleichen sekunde registriert werden, dann sollten sie zumindest
                //nicht die gleiche IP haben, :), weil Zeit+IP ist Primary Key
        }
        //aktuellen Counter auslesen
        $result_hits=mysql_db_query("database","Select * from hits");
        $anz_hits=mysql_Result($result_hits,0,"count");
        //Counter anzeigen
        echo "<BR><BR><center>Counter: $anz_hits</center>";
        mysql_close();
?>