grafischen Counter

Oftmals wird gefragt wie man einen grafischen Counter mit PHP realisieren könnte. Hier ist die Antwort

Grafischer Counter mit PHP

Oftmals wird gefragt wie man einen grafischen Counter mit PHP realisieren könnte. Um eine grafische Ausgabe zu realisieren benötigt man die GD Library und 10 Counter Grafiken mit den Zahlen 0-9.

Achtung, dieser Counter ist mehr eine Spielerei mit PHP und GD, leider ist er nicht sehr resPHPnschonend und deswegen nicht geeignet für grössere Anwendungen

<?php
// Variablen Konfiguration
// ====================================
$count=1;                   // Default Counter Stand
$ip=getenv("REMOTE_ADDR");  // Aktuelle IP Adresse von Besucher
$counterfile="counter.txt"// Speicherort
$anzahl 5;                // Anzahl der Counter Stellen
$reloadsperre FALSE;      // Reload ein (TRUE) oder aus (FALSE);
$error_img "fehler.png";  // Fehler Grafik Datei
?>

Hier sind ein paar Variablen die am Anfang des Scriptes gesetzt werden, diese Variablen werden benötigt damit das Script einwandfrei läuft und das Tutorial einigermassen verstanden werden kann ;-).

<?php
// Fehler Funktion
// ====================================
function error_image() {
  global 
$error_img;
  
$size GetImageSize($error_img);
  
$src_img ImageCreateFromPNG($error_img);
  
$c_img ImageCreate($size[0], $size[1]);
  
ImageCopy($c_img,$src_img0000$size[0], $size[1]);
  
imagedestroy($src_img);
  
Header("Content-type: image/png");
  
ImagePNG($c_img);           //error image wird ausgegeben
  
imagedestroy($c_img);
  exit;
}
?>

diese Fehler Funktion wird aufgerufen falls ein Fehler in dem Script auftritt. Es wird einfach nur eine Datei geöffnet und ausgegeben werden, diese Datei kann eine beliebige Grösse haben, muss aber im PNG Format vorliegen. Als erstes muss entschieden werden wo der aktuelle Counter Stand gespeichert werden soll, zum Anfang nehmen wir hier einfach eine Textdatei (auch wenn schon manche die Stirn runzeln ;-).

<?php
// Falls Counterdatei nicht existiert
// dann anlegen
// ====================================
if (!file_exists($counterfile)) {
  if (
$datei=fopen($counterfile,"w")) {
    
fputs($datei,"$count:$ip");
    
fclose($datei);
  } else {
    
error_image();
  }
?>

Dieser Code-Ausschnitt prüft ob die Counter Datei bereits angelegt ist, oder eine neue Datei angelegt werden muss.
Wird die Datei neu angelegt, schreibt der php Code direkt die neue Werte in diese Datei, $count ist der Counterstand, also beim erstmaligen Aufruf 1; $ip ist die IP des Besuchers.

<?php
} else {
  
// Counter lesen
  // ====================================
  
if (list($line) = file($counterfile)) {
    list(
$count,$old_ip)=split(":",$line);
    if (
$ip != $old_ip OR $reloadsperre == FALSE) {
      
$count++ ;
      
// Counter aktualisieren
      // =====================
      
if ($datei=fopen($counterfile,"w")) {
        
fputs($datei,"$count:$ip");
        
fclose($datei);
      } else {
        
error_image();
      } 
    }
  } else {
    
error_image();
  }
}
?>

Sollte die Datei bereits vorhanden sein, werden die alten Daten ausgelesen. Wenn die IP neu ist, oder die Reloadsperre aus ist, werden die neuen Daten direkt in die Datei geschrieben. Wichtig ist das der Doppelpunkt zwischen diesen beiden Daten ist, damit der Counter beim nächsten Aufruf auch die Daten wieder einlesen kann.

<?php
// Counterstand mit nullen auffuellen
// ====================================
$count str_pad($count$anzahl"0"STR_PAD_LEFT);
?>

Falls die Anzahl der Stellen des Counters größer ist, als die Stellenanzahl des aktuellen Wertes, muss die Wert am Anfang mit Nullen aufgefüllt werden. Z.b. käme dann ein Counterstand mit 0004 raus.
Leider ist diese sehr nützliche Funktion nur unter PHP4 verfügbar.

<?php
// Groesse einer Counter Grafik laden
// ====================================
$counter_size GetImageSize("0.png");
?>

Damit dieser Counter auch wirklich dynamisch ist, wird von einem image die Höhe und Breite ermittelt. Da ja alle Counter Grafiken die gleiche Höhe und Breite haben, gilt diese Größe für alle Grafiken.

<?php
// Counter Zielbild erstellen
// ====================================
$c_im ImageCreate(($anzahl*$counter_size[0]), $counter_size[1]);
?>

Nun wird das Zielbild mit der ImageCreate Funktion benutzt. Dieses Bild gilt als Grundlage für den Counter, auf diese momentan noch leere Bild werden nachher die Counter Grafiken kopiert.

<?php
// Einzelne Counter Zahlen erstellen
// ====================================
for($i=0;$i<$anzahl;$i++) {
  
$src_im ImageCreateFromPNG("$count[$i].png");
  
ImageCopy($c_im,                                //Ziel-Bild
  
$src_im,                                      //Quell-Bild
  
($counter_size[0]*$i),                        //Ziel-Bild x koordinate
  
0,                                            //Ziel-Bild y koordinate
  
0,                                            //Quell-Bild x koordinate
  
0,                                            //Quell-Bild y koordinate
  
$counter_size[0],                             //Quell-Bild x (w) breite
  
$counter_size[1]);                            //Quell-Bild y (h) hoehe
  
imagedestroy($src_im);
}
?>

Der Kern dieses Scriptes ist der obere PHP-Code. Hier wird in einer FOR Schleife alle Counter Grafiken mit der Funktion ImageCopy auf das leere Bild kopiert. Die Positionen werden dynamisch in jedem Schleifendruchlauf berechnet, so das die Grafiken nebeneinander erscheinen. Die Funktion ImageCreateFromPNG öffnet eine Counter Grafik und liest das Bild aus dieser Datei, am Ende der Schleife wird das Quellbild wieder zerstört weil es nicht mehr gebraucht wird.

<?php
// Counter ausgeben
// ====================================
Header("Content-type: image/png");
ImagePNG($c_im);           //counter png wird ausgegeben
imagedestroy($c_im);
?>

Zum Schluss wird noch der Counter ausgegeben, hier endet das Script.

Dieser Counter kann nun mit <img src="counter.php"> in eine HTML Datei eingebunden werden.

Erfahrungen

Es sind noch keine Kommentare vorhanden.

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe

Verwandte Beiträge

plotting masters - a professional guide - Teil II

Grafische Interpolation und Bestapproximation von numerischen Wertepaaren: Wir wollen Punkte auf einer Zeichenebene über verschiedene Verfahren miteinander verbinden. ...

EVAMasters

Autor : EVAMasters
Kategorie: PHP-Tutorials

Anzeige des letzten Besuchers auf der Website

PHP und MySQL ermöglichen es, mit wenig Aufwand Datum und Uhrzeit des letzten Besuchers auf der Homepage anzeigen zu lassen. ...

Lukas Beck

Autor : Lukas Beck
Kategorie: PHP-Tutorials

Wie erstelle ich ein LogIn-Skript?

Das folgende Tutorial nutzt eine Datenbank, in der die Benutzerdaten gespeichert werden und eine Session, in der der Benutzer registriert wird. ...

andy@

Autor : andy@
Kategorie: PHP-Tutorials

Das 'Nested Sets' Modell - Bäume mit SQL

Das 'Nested Sets' Modell - Bäume mit SQL

Dieses Tutorial beschreibt die 'Nested Sets'-Technik, mit der man solche Bäume mit SQL performant konstruieren kann. ...

gorski@

Autor : gorski@
Kategorie: mySQL-Tutorials

phpinfo() zeigt nichts an

Heute möchte ich Euch zeigen wie ihr die phpinfo() ausgeben könnt. ...

Webmasterfreaky

Autor : Webmasterfreaky
Kategorie: PHP-Tutorials

Was muss ich in WordPress einstellen, damit Google Fonts nicht mehr geladen werden?

Möchten Du WordPress davon abhalten, Google Fonts zu verwenden? Hier erfährst Du, was du dafür in WordPress einstellen musst. ...

admin

Autor : admin
Kategorie: Sonstige Tutorials

Was muss ich in WordPress einstellen, damit Google Fonts nicht mehr geladen werden?

Möchten Du WordPress davon abhalten, Google Fonts zu verwenden? Hier erfährst Du, was du dafür in WordPress einstellen musst. ...

admin

Autor : admin
Kategorie: Sonstige Tutorials

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen