kostenloser Webspace werbefrei: lima-city


IP-Counter

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    deltadesign

    deltadesign hat kostenlosen Webspace.

    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.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!