IP-Counter
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
adresse
aktuellem datum
aufruf
besucherzahl
code
date
datei
datensatz
datum
endung
erstellen
file
frage
funktion
gesamt null
monat
null
output
schritt
speichern
-
Da ich keine Möglichkeit habe mein Tutorial unter Tutorial zu hinterlegen und ich erst nachdem erstellen festgestellt habe das es nicht mehr geht. Hinterlasse ich mein Tutorial ihr im Forum.
IP Counter
Scriptsprache: PHP
Art der Datenspeicherung: Text/File
Ich habe hier schon einige Tutorials gesehen die sich mit dem Thema Counter oder
IP Counter befassen. Ich habe leider nur keine gesehen die wirklich überzeugen. Wohl aus dem Grund das hier alle sich schnell ein paar Gulden verdienen wollen. Sei\'s drum. Bei mir gibt es so was nicht.
Ich erkläre hier Schritt für Schritt wie ihr euch eine Counter erarbeiten könnt der sowohl die
IP-Adresse als auch das Datum speichert.
Ich beschreibe euch erst einmal die Funktionsweise bevor wir anfangen das Script zu erstellen. Bei jedem Aufruf der Seite wird die IP-Adresse des Surfers in einer Datei gesucht. Ist noch kein Eintrag vorhanden, wird der Seitenaufruf gezählt und ein Datensatz bestehend aus IP-Adresse und aktuellem Datum in die Datei geschrieben. Ist bereits ein Datensatz mit der IP-Adresse vorhanden, wird getestet, ob der letzte Aufruf lange genug zurückliegt, um den Aufruf erneut zu zählen. Ist dies der Fall, wird der Zähler um eins erhöht und der Datensatz mit der IP-Adresse und dem aktuellem Datum in die Datei geschrieben. Ist noch nicht genug Zeit verstrichen, passiert nicht, werde zählen noch speichern.
Für die Realisierung dieser Variante benötigen wir die IP-Adresse des Users. Diese stellt uns PHP in der Variablen $_SERVER[\'REMOTE_ADDR\'] zur Verfügung. Für das Datum können wir die Funktion date() verwenden. Wir benötigen auch einige Funktionen die uns das spätere erweitern des Counters vereinfachen.
Als erstes erstellt ihr eine Datei die die Endung .php hat. Denn nur so wird der Server den PHP-Code ausführen.
Das erste Codefragment:
<?php $user_ip = $_SERVER[\'REMOTE_ADDR\']; $today = date(\"d:m:Y\"); ?>
Das Dollarzeichen kennzeichnet immer eine Variable egal von welchem Datentyp sie ist.
Der String in den beiden Klammern, der date Funktion, bewirkt das der zurückgebene Wert formatiert wird.
Platzhalter | Ausgabe
d | Tag des Monats 01 - 31
m | Monat im Format 01 - 12
Y | Vierstellige Jahreszahl
Der Doppelpunkt ist nur ein Trennzeichen und kann durch ein Komma oder ein anderes Zeichen ausgetauscht werden.
Als erste Funktionen benötigen wir eine Funktion zum lesen und eine Funktion zum öffnen der Datei. Ich habe die Namen read_file open_file genommen.
<?php : : function read_file($file){ $output=file($file); //Datei zeilenweise auslesen return $output; } function open_file($file){ if(!file_exists($file)){ $counter = fopen($file,\"a\"); //Datei erstellen wenn nicht vorhanden }else{ $counter = fopen($file,\"r+\"); //Datei zum lesen und schreiben öffnen } return $counter; } : : ?>
So jetzt können wir eine Datei erstellen, lesen oder schreiben. Jetzt benötigen wir Funktionen zum auswerten der Daten. Lassen wir uns als erstes die IP und das Datum aus dem Datensatz hergeben.
<?php : : function get_IP($str){ $out = explode(\"[ip] \",$str); return $out[1]; } function get_Date($str){ $out = explode(\"[date] \",$str); return $out[1]; } : : ?>
Kommer wir jetzt zum ermitteln ob die IP und das Datum schon existiert.
<?php : : function exists_IP($str,$ip){ $c=0; if(strcmp($str,$ip.\"\\n\")==0) $c++; return $c; } function exists_Date($str,$date){ $c=0; if(strcmp($str,$date.\"\\n\")==0) $c++; return $c; } : : ?>
Jetzt kommt der Moment wo wir die von uns erabeiteten Funktionen nehmen und sie zusammen arbeiten lassen. Schließlich wollen wir ja die Daten speichern und vergleichen.
Die Funktion save_guest_count($file,$ip,$date):
<?php : : function save_guest_count($file,$ip,$date){ $f = open_file($file); $out = read_file($file); $c=0; $c1=0; foreach($out as $in){ if(get_IP($in)!=\"\") $c=exists_IP(get_IP($in),$ip); if(get_Date($in)!=\"\") $c1=exists_Date(get_Date($in),$date); if($in!=\"\"){ if(($c>0) and ($c1==0)){ fwrite($f,$in); } if(($c==0) and ($c1>0)){ fwrite($f,$in); } if(($c==0) and ($c1==0)){ fwrite($f,$in); } } } if(($c>0) and ($c1==0)){ fwrite($f,\"[ip] \".$ip.\"\\n\"); fwrite($f,\"[date] \".$date.\"\\n\"); } if(($c==0) and ($c1>0)){ fwrite($f,\"[ip] \".$ip.\"\\n\"); fwrite($f,\"[date] \".$date.\"\\n\"); } if(($c==0) and ($c1==0)){ fwrite($f,\"[ip] \".$ip.\"\\n\"); fwrite($f,\"[date] \".$date.\"\\n\"); } fclose($f); } : : ?>
Wir können nun die IP und das Datum speichern und überprüfen ob die IP mit dem aktuellem Datum schon in unserer Datei gespeichert ist. Jetzt könnten wir sagen das war es aber wir brauchen noch etwas zum sehen. Wir wollen wissen wieviele Heute, Gestern und Insgesamt auf der Webseite waren.
<?php : : function get_Guest_today($file,$date){ //Heute $out = read_file($file); $c=0; foreach($out as $in){ if(strcmp($date.\"\\n\", get_Date($in))==0) $c++; } return $c; } function get_Guest_yesterday($file,$date){ //Gestern $out = read_file($file); $c=0; $tmp = explode(\":\",$date); $tp = $tmp[0]-1; $date = \"0\".$tp.\":\".$tmp[1].\":\".$tmp[2]; foreach($out as $in){ if(strcmp($date.\"\\n\", get_Date($in))==0) $c++; } return $c; } function get_guest_summery($file){ //Insgesamt $out = read_file($file); $c=0; foreach($out as $in){ $c++; } return $c/2; } : : ?>
Es ist so weit jetzt kommt das Finale. Wie rufen die Funktionen auf und sorgen für eine optisch ansprechende Darstellung.
<?php : : save_guest_count(\"ipcounter.txt\",$user_ip,$today); //Besucher erkennen und speichern $t = get_Guest_today(\"ipcounter.txt\",$today); //Besucherzahl Heute $y = get_Guest_yesterday(\"ipcounter.txt\",$today); //Besucherzahl Gestern $s = get_guest_summery(\"ipcounter.txt\"); //Besucherzahl Gesamt $null = \"000000\"; if($t >=10) $null=\"00000\"; if($t >=100) $null=\"0000\"; if($t >=1000) $null=\"000\"; if($t >=10000) $null=\"00\"; if($t >=100000) $null=\"0\"; if($t >=1000000) $null=\"\"; echo \"<table id=\\\"cBody\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\">\"; echo \"<tr><td colspan=\\\"2\\\" id=\\\"cHead\\\">IP Counter</td></tr>\"; echo \"<tr><td id=\\\"cToday\\\">Heute: </td><td id=\\\"cToday\\\">\".$null.$t.\"</td></tr>\"; echo \"<tr><td id=\\\"cYesterday\\\">Gestern: </td><td id=\\\"cYesterday\\\">\".$null.$y.\"</td></tr>\"; echo \"<tr><td id=\\\"cSummery\\\">Gesamt: </td><td id=\\\"cSummery\\\">\".$null.$s.\"</td></tr>\"; echo \"</table>\"; : : ?>
Jetzt kommt noch schnell eine CSS-Datei um die oben erstellt Tabelle schick zu machen.
Wie ihr die Datei nennet ist euch überlassen hauptsache sie hat die Endung .css
@charset \"utf-8\"; /* CSS Document */ #cBody{ border:solid 1px #000000; background-color:#ffffff; width:140px; position:relative; left:5px; } #cHead{ background-color:#ffffff; border-bottom:dotted 2px #000000; font-family:Arial, Helvetica, sans-serif; font-size:15px; font-style:normal; font-weight:bold; color:#000000; } #cToday{ background-color:#ffffff; border-bottom:dotted 2px #000000; font-family:Arial, Helvetica, sans-serif; font-size:12px; font-style:normal; font-weight:bold; color:#000000; } #cYesterday{ background-color:#ffffff; border-bottom:dotted 2px #000000; font-family:Arial, Helvetica, sans-serif; font-size:12px; font-style:normal; font-weight:bold; color:#000000; } #cSummery{ background-color:#ffffff; font-family:Arial, Helvetica, sans-serif; font-size:12px; font-style:normal; font-weight:bold; color:#000000; }
hier könnt ihr Creative werden.
Beispiel für das einbinden in eine Datei (index.php):
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"> <html xmlns=\"http://www.w3.org/1999/xhtml\"> <head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /> <link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"style/ipcounter.css\"> <title>Seite mit IP-Counter</title> </head> <body> <?php include(\"ipcounter.php\");?> </body> </html>
Bei Fragen und Anregungen könnt ihr mich gerne kontaktieren. Auch bei Fragen die über PHP hinausgehen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage