Ein einfacher Besucherzähler

Was benötigst Du für einen Besucherzähler - die datenbank.php (Erläuterungen auf der vorigen Seite) und das Zählerscript, was wir hier erstellen. Über das Hauptscript ist die Zählerstandsausgabe nur per Text möglich. Um den Zählerstand auch als Bild einzufügen ist das Zusatzscript erforderlich.

Wie schon in der Überschrift steht, es wird ein einfacher Besucherzähler welcher nur Zugriffe zählt und ist kein Zähler mit Statistikfunktionen (Browser, Betriebssystem, gestern, heute, ...).
Dafür kannst Du mit ihm die Hauptdomain und die Subdomains getrennt zählen sowie anzeigen lassen, außer im Adminbereich, da werden alle Zählerstände aufgelistet.

Hier noch einmal zur Erinnerung der Inhalt der datenbank.php (im Verzeichnis "cgi-bin" was wiederum im Verzeichnis "privates" ist):
<?php
$Datenbank_server = ""; // --- Hier wird der Name des Datenbankservers angegeben!!! ---
$Datenbank_name = ""; // --- Hier wird der Name der Datenbank (Datenbankname) angegeben!!! ---
$Datenbank_user = ""; // --- Hier wird der Benutzername der Datenbank angegeben!!! ---
$Datenbank_passwort = ""; // --- Hier wird das Passwort zum Benutzer der Datenbank angegeben!!! ---
?>

Und hier das Script für einen einfachen Zähler, die zaehler.php im Verzeichnis "scripte" was ein Unterverzeichnis von "privates" ist:
<?php
// --- IP-Adresse des Besuchers feststellen ---
$user_ip_adresse = getenv("REMOTE_ADDR");
// --- Unix Zeit feststellen (Zeit in Sekunden seit Start der UNIX-Epoche) ---
$unix_jetzt = time();
// --- Sperrzeit festlegen ---
$sekunden = "60";
$minuten = "60";
$sperrzeit = bcmul($sekunden,$minuten); // --> 60*60 ergibt eine Stunde
$unix_sperre = bcadd($unix_jetzt,$sperrzeit); // --> Zeit, bis wann der Besucher für neues zählen gesperrt ist

// --- Tabellen für den Zähler bestimmen (hier werden die Werte später gespeichert) ---
// --- Haupttabelle für Zähler ---
$tabelle_zaehlerstand = "meine_zaehler_staende";
// --- Tabelle für sperren des erneuten Zählens ---
$tabelle_zaehlersperre = "meine_zaehler_sperre";
// --- dann hier Namen für jede Domain angeben (mindestens 4 Zeichen)
$domain = "hauptdomain"; // --> hauptdomain für www.meine-erste-homepage.de ?

// --- Datenbankverbindung laden, aber nur eine von beiden nutzen! (nichtgenutzte mit vorgestellten // sperren) ---
// --- für Testzwecke zum Direktaufruf ---
@include_once "../cgi-bin/datenbank.php";
// --- Laden in Homepageseite ---
@include_once "privates/cgi-bin/datenbank.php";
// --- Gegebenenfalls die obigen Pfade anpassen!!! ---

// --- Datenbankverbindung aufbauen ---
// --- ECHO-Anweisungen sollten nach Test mit vorgesetzten // ausgeblendet werden! ---
$db_oeffnen = @mysql_pconnect($Datenbank_server, $Datenbank_user, $Datenbank_passwort);
if($db_oeffnen == TRUE)
  {
    // --- Datenbank konnte geöffnet werden ---

    // --- Datenbankverbindung aktivieren ---
    $select_db = @mysql_select_db($Datenbank_name,$db_oeffnen);
    if($select_db == TRUE)
      {
        // --- Aktivierung erfolgreich ---
        // --- Tabellen auf vorhandensein prüfen und eventuell erstellen ---
        $tabelle1=false;
        $tabelle2=false;
        // --- Tabelle für Zählerstände suchen ---
        $sql = "SHOW TABLES FROM $Datenbank_name";// --- alle DB-Tabellen auflisten
        $result_table = mysql_query($sql);
        if(!result_table)// --- Wenn Verbindung fehl geschlagen
          {
            exit; // --- Script beenden
          }
        $alle_tabellen = array(); // --- Array für alle vorhandenen Tabellen reinschreiben
        while($row_table = mysql_fetch_row($result_table)) // --- Schleife für Tabellensuche
          {
            array_push ($alle_tabellen,$row_table[0]);// --- Tabellen ins Array schreiben
          }
        if(in_array($tabelle_zaehlerstand,$alle_tabellen))// --- nach Tabelle im Array suchen
          {
            $tabelle1=true;// --- wenn vorhanden, dann auf wahr setzen
          }
        if(in_array($tabelle_zaehlersperre,$alle_tabellen))
          {
            $tabelle2=true;
          }

        // --- Tabelle Zählerstand erstellen ja/nein ---
        if($tabelle1 == true)
          {
            //--- Tabelle für Zählerstände ist vorhanden -> Prüfen, ob Domain schon eingetragen ist ---
            $ueberpruefe_domain = @mysql_query("SELECT domain,stand FROM $tabelle_zaehlerstand WHERE domain='$domain'");
            $geprueft_domain = @mysql_num_rows($ueberpruefe_domain);
            // --- if(!geprueft_domain) ist TRUE (wahr), wenn nicht vorhanden
            if(!$geprueft_domain)
              {
                // --- Domain noch nicht eingetragen -> EINTRAGEN
                @mysql_query("INSERT INTO $tabelle_zaehlerstand (domain, stand) VALUES ('$domain','0')");
              }
          }
        else
          {
            //--- Tabelle für Zählerstände nicht vorhanden -> ERSTELLEN mit CREATE TABLE ---
            $zaehler_erstellen = "CREATE TABLE $tabelle_zaehlerstand (ID INTEGER AUTO_INCREMENT NOT NULL, " .
                                          "domain VARCHAR(16), stand VARCHAR(13), PRIMARY KEY (ID))";
            $zaehler_erstellt = @mysql_query($zaehler_erstellen);
            if($zaehler_erstellt == true)
              {
                $tabelle1 = true;
                // --- Damit der Zähler funktioniert -> ersten Eintrag erstellen ---
                @mysql_query("INSERT INTO $tabelle_zaehlerstand (domain, stand) VALUES ('$domain','0')");
              }
          }// Ende $tabelle1 == true

        // --- Tabelle Zählersperre erstellen ja/nein ---
        if($tabelle2 == true)
          {
            //--- Tabelle für Zählersperre ist vorhanden ---
          }
        else
          {
            //--- Tabelle für Zählersperre nicht vorhanden -> ERSTELLEN mit CREATE TABLE ---
            $sperre_erstellen = "CREATE TABLE $tabelle_zaehlersperre (ID INTEGER AUTO_INCREMENT NOT NULL, " .
                                          "ip VARCHAR(16), domain VARCHAR(16), gesperrt_bis VARCHAR(16), PRIMARY KEY (ID))";
            $sperre_erstellt = @mysql_query($sperre_erstellen);
            if($sperre_erstellt == true)
              {
                $tabelle2 = true;
              }
          }// Ende $tabelle2 == true

        // --- vorsichtshalber noch mal prüfen, ob beide Tabellen vorhanden sind ---
        if($tabelle1 == true && $tabelle2 == true)
          {
            // --- Tabellen vorhanden -> weiter ---
            // --- als erstes jetzt abgelaufene IP's entfernen ---
            @mysql_query("DELETE FROM $tabelle_zaehlersperre WHERE gesperrt_bis < $unix_jetzt");
            // --- Jetzt nach der IP-Adresse des Besuchers in der Sperre suchen ---
            $ueberpruefe_ip = @mysql_query("SELECT ip,domain,gesperrt_bis FROM $tabelle_zaehlersperre WHERE ip='$user_ip_adresse' AND gesperrt_bis > $unix_jetzt AND domain='$domain'");
            $geprueft_ip = @mysql_num_rows($ueberpruefe_ip);
            if(!$geprueft_ip)
              {
                // --- IP-Adresse nicht vorhanden -> Besuch zählen ---
                $nicht_vorhanden = @mysql_query("SELECT stand,domain FROM $tabelle_zaehlerstand WHERE domain='$domain'");
                while ($row = @mysql_fetch_array($nicht_vorhanden))
                  {
                    // --- alten Besucherstand feststellen --
                    $gesamt_stand = $row[stand];
                    // --- Besucherstand um 1 erhöhen ---
                    $zaehlerstand = bcadd($gesamt_stand, '1');
                  }//Ende while
                // --- neuen Zählerstand eintragen ---
                $sql=@mysql_query("UPDATE $tabelle_zaehlerstand SET stand='$zaehlerstand' WHERE domain='$domain'");
                // --- neue IP-Adresse und Sperrzeit eintragen ---
                @mysql_query("INSERT INTO $tabelle_zaehlersperre (ip, domain, gesperrt_bis) VALUES ('$user_ip_adresse','$domain','$unix_sperre')");
              }
            else
              {
                // --- IP bereits vorhanden -> Besuch NICHT zählen -> nur Zählerstand feststellen ---
                $ip_vorhanden = @mysql_query("SELECT domain,stand FROM $tabelle_zaehlerstand WHERE domain='$domain'");
                while ($row = @mysql_fetch_array($ip_vorhanden))
                  {
                    $gesamt_stand = $row[stand];
                    $zaehlerstand = $gesamt_stand;
                  }//Ende while
              }
            // --- Nun steht der aktuelle Zählerstand in der Variablen $zaehlerstand ---
           
          }
        else
          {
            // --- Tabellen nicht vorhanden ---
            echo "<p>Mindestens eine Tabelle existiert immer noch nicht!!!</p>\n";
            // --- Echo-Anweisung kann bei ordentlicher Funktion ausgeblendet werden (//) ---
          }// Ende $tabelle1 == true && $tabelle2 == true

      }
    else
      {
        // --- Aktivierung fehlgeschlagen ---
        echo "<h2>Aktivierung der Datenbank fehlgeschlagen!</h2>\n";
        // (ECHO-Anweisung kann nach erfolgreichen Test ausgeblendet werden)
      }
  }//Ende $select_db == TRUE
else
  {
    // --- Datenbank konnte nicht geöffnet werden ---
    echo "<h1>Datenbank konnte nicht geöffnet werden!!!</h1>\n";
    // (ECHO-Anweisung kann nach erfolgreichen Test ausgeblendet werden)
  }//Ende $db_oeffnen == TRUE

// --- Falls gewünscht - Stellenanzahl des Besucherzählers auffüllen ---
$zaehler_laenge="6"; // --> Stellenzahl des Besucherstandes
$zaehlerstand_lang = sprintf ("%0" .$zaehler_laenge. "d","$zaehlerstand"); // --> auf Stellenzahl auffüllen
?>

Das bis hierhin vorgestellte Zählerscript wird in den HEAD-Bereich der Webseite eingefügt. Der Zählerstand selbst wird an beliebiger Stelle über die ECHO-Anweisung geladen.
Laden in Webseite:
<head>
<?php
@include_once "privates/scripte/zaehler.php";
?>
</head>
Anzeigen im Quelltext:
<body>
<?php echo "$zaehlerstand ($zaehlerstand_lang)"; ?>
</body>

Falls Du den Zählerstand als Bild aufbauen und anzeigen lassen möchtest, dann musst Du dieses Zusatzscript verwenden, welches Du über
<img src="privates/scripte/bild-zaehler.php" border="0" width="84" height="21" alt="<?php echo "$zaehlerstand"; ? > Besucher bisher">
im Body-Bereich laden kannst.

Hier das Script Zählerstand in Bild -> die bild-zaehler.php
<?php
// --- Datenbankverbindung laden ---
include_once "../cgi-bin/datenbank.php";
// --- Domain festlegen ---
$domain = "hauptdomain";
// --- Tabelle festlegen ---
$tabelle_zaehlerstand = "meine_zaehler_staende";
// --- Datenbankverbindung aufbauen ---
$db_oeffnen = @mysql_pconnect($Datenbank_server, $Datenbank_user, $Datenbank_passwort);
if($db_oeffnen == TRUE)
  {
    // --- Datenbank wurde geöffnet ---
    $select_db = @mysql_select_db($Datenbank_name,$db_oeffnen);
    if($select_db == TRUE)
      {
        // --- Aktivierung erfolgreich ---
        // --- Tabelle für Zählerstände suchen ---
        $tabelle=false;
        $pruefe_tabelle = @mysql_list_tables($Datenbank_name,$db_oeffnen);
        if ($pruefe_tabelle)
          {
            while ($Tabelle = mysql_fetch_row($pruefe_tabelle))
              {
                if ($Tabelle[0] == "$tabelle_zaehlerstand")
                  {
                    $tabelle=true;
                    break;
                  }
              }
          }
        if($tabelle == true)
          {
            // --- Tabelle existiert - Stand suchen ---
            $tabelle_stand = @mysql_query("SELECT stand,domain FROM $tabelle_zaehlerstand WHERE domain='$domain'");
            while ($row_stand = @mysql_fetch_array($tabelle_stand))
              {
                $zaehlerstand = $row_stand[stand];
              }
          }
        else
          {
            // --- Tabelle NICHT vorhanden ---
            $zaehlerstand = "";
          }
      }
    else
      {
        // --- Aktivierung fehlgeschlagen ---
        $zaehlerstand = "";
      }
  }
else
  {
    // --- Datenbank konnte nicht geöffnet werden ---
    $zaehlerstand = "";
  }
// --- aktuellen Zählerstand anzeigen ---
if(strlen($zaehlerstand) >= '1')
  {
    // --- Zählerstand wurde ermittelt ---
    $laenge="6"; // --> Stellenzahl des Besucherstandes
    $zahl = sprintf ("%0" .$laenge. "d","$zaehlerstand"); // --> auf Stellenzahl auffüllen
    Header ("Content-type: image/gif"); // --> Header für Bild erstellen
    $image = ImageCreate (84, 21); // --> Bildgröße festlegen
    $tc = ImageColorAllocate ($image, 0, 0, 0); // --> Hintergrundfarbe festlegen (hier schwarz)
    for ($i=0; $i<$laenge; $i++) // --> Schleife für Bildtausch und -auffüllen
      {
        // --- Bilder zum Script sind im Ordner "bilder" als Unterordner im Ordner "zaehler" ---
        $abstand=bcmul($i,"14"); // --> Einzelbildabstand nach links festlegen
        // --- Bildnummern feststellen
        if($zahl[$i] == '0'){$bild = "0";}
        if($zahl[$i] == '1'){$bild = "1";}
        if($zahl[$i] == '2'){$bild = "2";}
        if($zahl[$i] == '3'){$bild = "3";}
        if($zahl[$i] == '4'){$bild = "4";}
        if($zahl[$i] == '5'){$bild = "5";}
        if($zahl[$i] == '6'){$bild = "6";}
        if($zahl[$i] == '7'){$bild = "7";}
        if($zahl[$i] == '8'){$bild = "8";}
        if($zahl[$i] == '9'){$bild = "9";}
        $image1 = imagecreatefromgif("bilder/$bild.gif"); // --> Abbild des Bildes erstellen
        imagecopyresized($image, $image1, $abstand,0, 0,0,14,21, 14,21); // --> Abbild kopieren/einfügen
      }
    imagecolortransparent ($image,$tc); // --> Transparenz des Bildes festlegen ($tc = schwarz -> schwarzwerte entfernen)
    imagegif($image); // --> Bild wird endgültig erstellt
    imagedestroy ($image); // --> belegten Speicher wieder freigeben
    // --- !!! Bei Bildausgaben generell alle ECHO-Anweisungen ausblenden (vorgestellte // ) !!! ---
  }
else
  {
    // --- Zählerstand konnte nicht ermittelt werden ---
    $fehler_text = "ERROR"; // -> oder ------
    Header ("Content-type: image/gif"); // --> Header für Bild erstellen
    $image = ImageCreate (84, 21); // --> Bildgröße festlegen
    $tc = ImageColorAllocate ($image, 0, 0, 0); // --> Hintergrundfarbe festlegen (hier schwarz)
    $text_color = ImageColorAllocate ($image, 255, 255, 255); // --> Textfarbe festlegen (hier weiß)
    ImageString ($image, 5, 5, 5, $fehler_text, $text_color); // --> 5,5,5 = Textgröße, Abstand Links, Abstand oben
    imagecolortransparent ($image,$tc); // --> Transparenz des Bildes festlegen ($tc = schwarz -> schwarzwerte entfernen)
    imagegif($image); // --> Bild wird endgültig erstellt
    imagedestroy ($image); // --> belegten Speicher wieder freigeben
  }
?>

Für die ordnungsgemäße Funktion benötigst Du Bilder von Zahlen (Ziffern) in der Größe von 14 (Breite) mal 21 (Höhe) Pixel. Du benötigst alle Zahlen (Ziffern) von 0 bis 9. Der Ordner für die Bilder heißt "bilder", was ein Unterverzeichnis von "scripte" ist, welches sich wiederum im Verzeichnis "privates" befindet.