Ergebnis 1 bis 10 von 31

Thema: [Tutorial] Statspicker mit Cache

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Avatar von Gremlin
    Registriert seit
    05.07.2006
    Beiträge
    5.206

    [Tutorial] Statspicker mit Cache

    Hallo,
    hier mal ein kleines Tutorial in dem beschrieben wird wie man für das VMS einen ordentlichen Statspicker erstellt der zudem noch gecachet wird wodurch die Serverbelastung minimal bleibt.

    Systemvorraussetzungen
    - GDLib
    - php >= 5

    1) Rohling erstellen
    Als erstes benötigt man einen Rohling auf diesen werden die Userstatistiken geschrieben. Ich nutze hier eine png Datei 185x50 Pixel


    Picker von PrimeraClub.de


    2) Speicherort für Cache erstellen
    Damit die gecachten Statpicker auch irgendwo gespeichert werden können brauchen wir einen beschreibbaren ordner. Ich habe dafür den Ordner:
    /dynamic_cache/picker/
    erstellt, dieser Ordner braucht Chmod 777.

    3) PHP Datei für den Picker erstellen
    Das Herzstück ist die php Datei welche den Rohling beschriftet und zwischenspeichert diese habe ich picker.php genannt und ins Hauptverzeichnis gelegt.

    PNG-Header senden
    Als nächstes müssen wir dem Browser sagen das es sich bei der Ausgabe um ein PNG Bild handelt das ganze machen wir mit:

    PHP-Code:
    header('Content-Type: image/png'); 
    Vorher darf keinerlei Ausgabe stattfinden auch kein Leerzeichen vor <?php.

    Prüfen ob Picker schon gecachet wurde und noch aktuell ist
    Damit das Script weis ob es den Picker neu erstellen muss oder aus dem Cache laden kann prüfe ich:
    a) ob die Cachedatei besteht
    b) Bearbeitungszeit der Cachedatei
    Wenn die Cachedatei älter als 600 Sekunden (10 Minuten) ist möchte ich sie neu erstellen lassen.

    PHP-Code:
    if (!file_exists('dynamic_cache/picker/'.$_GET['uid'].'.png') || @filemtime('dynamic_cache/picker/'.$_GET['uid'].'.png') < time()-600){ 
    Hier ist schon zu erkennen das die Cachedatei z.B. als 1.png für den User mit der ID 1 abgespeichert wird, hierzu später mehr.

    Datenbankverbindung aufbauen
    Wenn die Cachedatei veraltet ist baue ich die Verbindung zur Datenbank auf um die neuen Daten zu holen.
    Damit nicht die komplette functions.lib.php includet werden muss baue ich in dieser Datei die Verbindung direkt mit

    PHP-Code:
    $db_host        "localhost";                              
    $db_user        "user";                                   
    $db_pass        "passwort";                                       
    $db_base        "datenbank";  
    $db_prefix       "vms";

    mysql_connect($db_host,$db_user,$db_pass);
    mysql_select_db($db_base); 
    auf ich habe hier extra die Variablen genommen damit ich bei Änderung schnell mal aus der functions.lib copy paste machen kann.

    Ausgabepuffer aktivieren
    Mit
    PHP-Code:
    ob_start(); 
    starte ich den Ausgabepuffer sämtliche Ausgaben an den Clienten werden nicht sofort ausgegeben sondern in dem interenen Puffer gespeichert mehr dazu später.

    Daten auslesen
    Man kann sämtliche Daten auslesen und ausgeben ich gebe lediglich Nickname und Kontostand aus diese Daten lese ich aus der DB aus:

    PHP-Code:
    $stat mysql_fetch_assoc(mysql_query('SELECT k.kontostand,u.nickname FROM 
                               '
    .$db_prefix.'_kontodaten AS k
                               LEFT JOIN '
    .$db_prefix.'_userdaten AS u ON u.uid = k.uid
                         WHERE k.uid='
    .(INT)$_GET['uid'].' LIMIT 1')); 
    Bild erzeugen
    Nun kommt der Rohling zum Einsatz mit:
    PHP-Code:
    $picker ImageCreateFromPng('images/picker/1.png'); 
    erzeuge ich ein neues Bild in php welches zur weiteren Bearbeitung über $picker ansprechbar ist.

    Schriftfarbe
    Die Schriftfarbe setze ich mit

    PHP-Code:
    $schriftfarbe ImageColorAllocate($picker,0,0,0); 
    die 3 Zahlen stehen für RGB Werte und können beliebig angepasst werden.

    Beschriftung
    So das wirklich wichtige ist nun die Beschriftung der Daten auf den Statpicker. Hierfür nutze ich wie man schon bemerkt haben dürfte die GDLib diese ist sehr weit verbreitet und reicht für unsere Anforderungen aus. Ich nutze hierfür ImageTTFText() weil ich damit beliebige TTF Schriftarten nutzen kann.

    Als erstes schreibe ich in einer großen Schriftart den Nicknamen an den oberen Rand vom Bild:
    PHP-Code:
    ImageTTFText($picker,12,0,5,13,$schriftfarbe,"css/trebucbd.ttf",$stat['nickname']); 
    die 12 steht dabei für die Schriftgröße
    die 0 steht für eine Drehung der Schrift in ° im Uhrzeigersinn.
    die 5 und 13 stehen für den Abstand von x/y Achse
    $schriftfarbe haben wir eben oben definiert das färbt also die Schrift schwarz ^^
    "css/trebucbd.ttf" gibt den Pfad zur ttf Datei an genügend Fonts gibt es unter http://www.fontasy.de/ da beziehe ich auch meine.
    $stat['nickname'] steht einfach für den String der ausgegeben werden soll und kann natürlich durch alles mögliche ersetzt werden.

    Dann gebe ich noch Guthaben und Seitenname aus hier nutze ich andere Schriftart, Schriftgröße, Ausrichtung etc. das sieht bei mir dann so aus:
    PHP-Code:
    ImageTTFText($picker,8,0,5,26,$schriftfarbe,"css/COMIC.TTF","Guthaben: ".$stat['kontostand']);

    ImageTTFText($picker,8,0,5,49,$schriftfarbe,"css/COMIC.TTF","PrimeraClub.de"); 
    Bild ausgeben
    Mit folgender Zeile gibt das php Script dann das Bild als png an den Browser aus:
    PHP-Code:
    ImagePng($picker); 
    Dann geben wir noch den belegten Speicher frei mit:
    PHP-Code:
    ImageDestroy($picker); 
    MySQL Verbindung beenden
    Dann noch schön die Datenbankverbindung beenden:
    PHP-Code:
    mysql_close(); 
    Bild zwischenspeichern
    PHP-Code:
    file_put_contents('dynamic_cache/picker/'.$_GET['uid'].'.png'ob_get_flush() ); 
    mit ob_get_flush() hole ich den Inhalt aus dem Puffer dieser beinhaltet also nun das PNG Bild diesen Speichere ich in dann als png in unserem Cache Verzeichnis. (Hier wird php5 benötigt, php4 kennt file_put_contents() noch nicht)

    Bild war schon vorhanden
    Das bislang war alles was wir machen mussten weil das Bild noch nicht gespeichert oder veraltet war die if Abfrage wurde also noch nicht beendet. Wenn das Bild doch schon vorhanden dann müssen wir einfach nur noch die Datei auslesen:

    PHP-Code:
    }else{
      
    readfile('dynamic_cache/picker/'.$_GET['uid'].'.png');

    Dadurch wird dann halt der alte Picker nochmal geladen und an den Browser ausgegeben.

    Der User kann nun den Picker mit
    http://www.deine-domain.de/picker.php?uid=USERID
    aufrufen.

    So schaut es aus:


    Wenn ihr meine Url betrachtet könnt ihr sehen das bei mir auch noch die Variable &picker=1 ausgegeben wird das hat damit zu tun weil ich noch verschiedene Designs anbiete aber das muss ja nicht sein aber ist auch relativ einfach.

    Mod_Rewrite
    Einige Foren verbieten das einbinden von dynamischen Bildern hierfür habe ich auch schon einen Weg gefunden: Manipulation der Url mit mod_rewrite. Hierfür erfordert euer Server jedoch mod_rewrite. Erstellt einfach eine .htaccess mit folgendem Inhalt:

    Code:
    RewriteRule ^picker-([0-9]+).png$ picker.php?uid=$1
    Ab sofort ist der Picker von User 1 dann z.B. als picker-1.png verfügbar. Sollte nachdem erstellen der .htaccess ein 500 Error erscheinen ist auf eurem Server kein Mod_Rewrite installiert. Ihr könnt euren Hoster jedoch bitten das zu aktivieren.

    Viel Spaß mit dem Picker.

    Der Picker darf gratis in Verbindung mit dem VMS1.x genutzt werden.

    Gruß
    Gremlin

    Ps.: Wer mir was spenden will dafür kann es gerne tun!
    Klammid: 184974
    PrimusPortal Nick: Gremlin
    PayPal: gremlincomputer [at] gmx [punkt] de
    Ich freue mich auch über Backlinks von eurer Homepage hierzu könnt ihr diesen Code nutzen:
    Code:
    <a href="http://www.joke-factory.de" title="Witze" rel="follow">Witze</a>
    Ps.: Die Grafik oben darf nicht verwendet werden.
    Diskutiere nie mit Idioten - sie holen Dich auf ihr Niveau und schlagen Dich dort mit Erfahrung!



  2. #2
    Erfahrener Benutzer
    Registriert seit
    20.06.2007
    Beiträge
    1.905
    Ich muss sagen das du dir so viel mühe gemacht hast und es kostenlos hiereingestellt hast finde ich schon supi


    MFG
    adi

  3. #3
    Erfahrener Benutzer Avatar von Gremlin
    Registriert seit
    05.07.2006
    Beiträge
    5.206
    Hab noch viele solcher Tutorials hab mir vorgenommen hier ab und zu mal welche zu veröffentlichen. Ist besser als wenn man direkt fertige Lösungen postet da hat ja keiner was von.

    Hätte z.B. noch:
    - Cache der Mediadaten
    - Cache der Top 10 Liste

    funktionieren alle fast genauso wie hier sogar noch etwas einfacher weil hier ja noch der Statpicker an sich erstellt werden musste.

    Wenn jemand noch eine Idee hat gerne PM mal schauen was sich machen lässt

    Gruß
    Gremlin
    Diskutiere nie mit Idioten - sie holen Dich auf ihr Niveau und schlagen Dich dort mit Erfahrung!



  4. #4
    Benutzer
    Registriert seit
    17.04.2008
    Beiträge
    42
    Du verlangst in der Datenbankabfrage das $db_prefix, ohne es irgendwo angegeben zu haben.

    PHP-Code:
    $stat mysql_fetch_assoc(mysql_query('SELECT k.kontostand,u.nickname FROM 
                               '
    .$db_prefix.'_kontodaten AS k
                               LEFT JOIN '
    .$db_prefix.'_userdaten AS u ON u.uid = k.uid
                         WHERE k.uid='
    .(INT)$_GET['uid'].' LIMIT 1')); 
    Ersetze also

    PHP-Code:
    $db_host        "localhost";                              
    $db_user        "user";                                   
    $db_pass        "passwort";                                       
    $db_base        "datenbank";  

    mysql_connect($db_host,$db_user,$db_pass);
    mysql_select_db($db_base); 
    durch

    PHP-Code:
    $db_host        "localhost";                              
    $db_user        "user";                                   
    $db_pass        "passwort";                                       
    $db_base        "datenbank";  
    $db_prefix        "vms";

    mysql_connect($db_host,$db_user,$db_pass);
    mysql_select_db($db_base); 
    und alles passt dann soweit.

    Gruß
    Ralf

  5. #5
    Erfahrener Benutzer Avatar von Gremlin
    Registriert seit
    05.07.2006
    Beiträge
    5.206
    Korrekt, im Orignal hab ich direkt vms_ geschrieben deshalb ist es mir nicht aufgefallen . Danke!

    Gruß
    Gremlin
    Diskutiere nie mit Idioten - sie holen Dich auf ihr Niveau und schlagen Dich dort mit Erfahrung!



  6. #6
    Erfahrener Benutzer
    Registriert seit
    20.06.2007
    Beiträge
    1.905
    Ich ahbe es mal localhost weise mal zusammen gebaut und installiert und bei mir zeigt er immer an das er es nicht laden knna weil ein fehler vorhanden ist , lade ich die ganz alte aus dem dl beriehc hoch funkioniert es :-(


    MFG
    adi

  7. #7
    Erfahrener Benutzer Avatar von Gremlin
    Registriert seit
    05.07.2006
    Beiträge
    5.206
    Systemvorraussetzungen
    - GDLib
    - php >= 5
    Beides vorhanden?
    Diskutiere nie mit Idioten - sie holen Dich auf ihr Niveau und schlagen Dich dort mit Erfahrung!



  8. #8
    Erfahrener Benutzer
    Registriert seit
    20.06.2007
    Beiträge
    1.905
    PhP : 5.2.x
    GDLib ? was ist das ?

Ähnliche Themen

  1. Frage zu Statspicker
    Von riwasch im Forum Support zu Addons & Erweiterungen
    Antworten: 15
    Letzter Beitrag: 17.04.2012, 16:08
  2. Antworten: 0
    Letzter Beitrag: 28.07.2009, 16:50
  3. [Tutorial] Ralleyübersicht auf der Startseite Cache
    Von Xenon im Forum [HD] Programmieren
    Antworten: 0
    Letzter Beitrag: 21.05.2008, 15:00
  4. Statspicker ändern VMS1
    Von Rapper im Forum Support zu Addons & Erweiterungen
    Antworten: 5
    Letzter Beitrag: 28.05.2007, 18:41
  5. Statspicker als BB Code
    Von KiLLzOnE im Forum Support zu Addons & Erweiterungen
    Antworten: 10
    Letzter Beitrag: 22.12.2006, 23:08

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •