yubb.de-Logo
Tutorials
yubb@yubb
yubbService
Inside yubb

Counter mit der GD Lib, MySQL und FreeType

In diesem Tutorial zeigt michi euch wie man sich ganz einfach einen Counter mit der GD Lib in Verbindung mit FreeType und MySQL macht.

In diesem Tutorial wird auf die Funktion aus dem Tutorial hier zurückgegriffen. Des weiteren ist es sinnvoll, wenn man sich schonmal mit der GD Lib vertraut gemacht hat. Dazu empfiehlt sich dieses Tutorial.
(Leider) braucht man für dieses Script die GD Lib und FreeType. Beides ist mittleweile bei den meisten Hostern standardmößig verfügbar, aber auch hier bestätigen Ausnahmen die Regel.

Der Counter hat eine IP-Sperre. Es wird die IP geloggt und die Zeit des letzten Besuches mit dieser IP, sodass man auf diesem Script basierend ohne weiteres ein "User Online" script machen kann etc.!

Ich habe den Quelltext soweit durchkommentiert, werde am schluss jedoch nochmal auf ein paar wenige Funktionen eingehen.

Als erstes folgenden MySQL Befehl ausführen:
Code:
CREATE TABLE `counter` (
`ID` int(11) NOT NULL auto_increment,
`ipadress` varchar(15) NOT NULL default '',
`lastvisit` int(11) NOT NULL default '0',
PRIMARY KEY (`ID`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;


PHP-Datei:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
/* Counter mit MySQL, GD Lib und FreeType
Copyright 2003 by Michael Kuhn
das unsichtbare Copyright darf nicht entfernt
werden! Visit: htp://www.coolklicks.de */

//IP Funktion
function getip() {
    
//wenn der User über nen Proxy in's Internet geht...
    //muss die IP so "geholt" werden...
    
if(getenv("HTTP_X_FORWARDED_FOR")) {
        
$ip getenv("HTTP_X_FORWARDED_FOR");
    } else {
        
//ansonsten so...
        
$ip getenv("REMOTE_ADDR");
    }
    return 
$ip;
}

//MySQL_Error
//diese Funktion habe ich in einem anderen Tutorial bereits erklärt
function db_error() {
    
$strTemp "";
    switch(
mysql_errno()) {
        case 
0:
            
$strTemp "";
            break;
        case 
1046:
            
$strTemp "Die Datenbank ist detzeit nicht erreichbar!";
            break;
        case 
2005:
            
$strTemp "Der Server ist derzeit nicht erreichbar!";
            break;
        default:
            
$strTemp "Die Seite konnte nicht fehlerfrei ausgeführt werden! ".
            
"Bitte versuche es später noch mal!";
            break;
    }
    echo(
"<font color=\"#FF0000\"><b>"$strTemp ."</b></font>");
}

//Zur Datenbank verbinden
@mysql_select_db("host""user""passwort") or die(db_error());

//die DB selektieren
@mysql_select_db("name") or die(db_error());

//IP des Besuchers herausfinden
$ip getip();

//überprüfen, ob diese IP bereits in der DB ist
$check mysql_query("SELECT * FROM counter WHERE ipadress='$ip' LIMIT 1");
$check mysql_num_rows($check);

//wenn die IP noch nicht in der DB ist, wird sie eingefügt...
if($check == 0)
    
mysql_query("INSERT INTO counter (ipadress, lastvisit) VALUES ('$ip', '".mktime()."')");
//ansonsten wird die Zeit des letzten Besuches upgedatet
else
    
mysql_query("UPDATE counter SET lastvisit='".mktime()."' WHERE ipadress='$ip'");

//alles aus der Tabelle wählen um hinterher mit mysql_num_rows() herauszufinden,
//wieviele Besucher schon auf der Seite waren
$data mysql_query("SELECT * FROM counter");
$besucher .= mysql_num_rows($data);

//die Zahl formatieren (tausender-trennzeichen)
$besucher number_format($besucher0","" . ");   

//das bild erzeugen
$image imagecreate(10037);

//hintergrundfarbe festlegen, in diesem Fall weiß
$bg imagecolorallocate($image255255255);

//Schriftfarben festlegen, in diesem Fall:
//schwarz und...
$font1 imagecolorallocate($image000);
//... grün
$font2 imagecolorallocate($image01530);

//dieser Text steht ganz oben auf dem Bild
$counter "Counter";

//das oben festgelegte Wort auf den Counter schreiben
imagettftext($image9.30410$font1"./fonts/planetbe.ttf"$counter);

//die Zahl der Besucher auf das Bild schreiben
imagettftext($image10.30324$font2"./fonts/bit3.ttf"$besucher." Besucher");

//seit wann gemessen wird auf das Bild schreiben
imagestring($image1326"seit dem 05.08.2001"$font1);

//den MimeType festlegen
header("Content-type: image/png");

//das Bild an den Browser schicken
imagepng($image);

//den Speicherplatz für andere Dinge freigeben
imagedestroy($image);
?>




Viele werden sich jetzt sicher fragen: wzu braucht man FreeType!?
Man braucht es in diesem Script für exakt eine Funktion: imagettftext. Mit dieser Funktion können wir mit einem X-Beliebigen Font einen beliebigen text auf das Bild schreiben. So hat man nicht immer nur diese komische, langweilige schrift, sondern auch mal was peppiges.
Die Parameter deiser Funktion sind Folgende:
1. [im] = das erzeugte Image (in diesem Fall $image)
2. [size] = die Größe des Textes
3. [angle] = der Winkel, in dem der Text ausgegeben wird
4. [x] = Abstand des Textes in Pixeln von links
5. [y] = Abstand des Textes in Pixeln von oben
6. [col] = die Farbe, die vorher mit imagecolorallocate festgelegt wurde
7. [font] = Pfad zum Font (muss im TTF Format sein)
8. [text] = der Text, der mit [font] auf das Bild [im] geschrieben werden soll



Die anderen GD Lib Funktionen wurden eigentlich schon in dem Tutorial von LLCoolDannY erklärt, auf das ich zu Beginn aufmerksam gemacht habe. Alle anderen Funktionen sollten mittlerweile bekannt sein...


So, das war mal wieder ein Tutorial von mir :D
greets, michi

Geschrieben von michi am 18.06.2004 (10778x gelesen)
weiterempfehlen weiterempfehlen   Druckversion Druckversion   kommentieren kommentieren

Mach das ganze mal txt-Basierend, dann wärs besser ;)



oder am besten beides
Geschrieben von LLCoolDannY
seh ich aus als ob ich mich mit Textvasierenden PHP Scripen auskenn? :P



Ich hätte es auch mit SQLite machen können oder PostgreSQL, aber das ist halt noch kaum verbreitet... ;(
Geschrieben von michi
@mysql_select_db("host", "user", "passwort") or die(db_error());
(zeile 44)


hä?? select_db, dass solte
mysql_connect sein,
das kann ja gar nicht gehen.
Geschrieben von Roland
das script ist schlecht geschrieben.

zeile 52 + 57 + 60 sollte/muss man das $ip in ".$ip." ändern damit es geht.
Geschrieben von Roland