Ergebnis 1 bis 9 von 9

Thema: [Tutorial] Mediadaten Cachen

  1. #1
    Erfahrener Benutzer Avatar von Gremlin
    Registriert seit
    05.07.2006
    Beiträge
    5.206

    [Tutorial] Mediadaten Cachen

    Hallo,
    in meinem letzten Tutorial habe ich beschrieben wie man einen Statpicker mit Cache erstellt, heute möchte ich zeigen wie ihr eure Mediadaten cachen könnt. Die Erzeugung der Mediadaten kann unter Umständen viel Last für den Server verbrauchen jenachdem wieviele Statistiken dort angezeigt werden deshalb ist es sinnvoll wenn man die Mediadaten z.B. nur alle 15 Minuten neu generiert.

    Das Cachen der Mediadaten ist in wenigen Schritten erledigt und benötigt nicht viel arbeit.

    Systemvorraussetzungen
    - PHP >= 5

    1) Cache Verzeichnis erstellen
    Wir brauchen wieder ein Verzeichnis wo wir die Mediadaten zwischenspeichern wer das letzte Tutorial schon gemacht hat der besitzt bereits das Verzeichnis "dynamic_cache" im Hauptverzeichnis vom VMS. Wer dies noch nicht hat muss es noch erstellen und chmod777 vergeben.


    2) Cache in Mediadaten einbauen

    In der Datei /content/intern/mediadaten.php muss man nun den Cache einbauen, dafür prüft man zum einen am Anfang der Datei wieder ob die Cache-Datei existiert und ob sie veraltet ist das ganze geschieht mit:

    PHP-Code:
    if (!file_exists('dynamic_cache/mediadaten.txt') || @filemtime('dynamic_cache/mediadaten.txt') < time()-600)

    Die 600 steht dabei wieder für die Zahl der Sekunden in der die Mediadaten neu erstellt werden sollen (Hier 10 Minuten).

    Wenn die Datei nicht existiert oder veraltet ist starten wir wieder den internen php Puffer wo die Ausgaben drin gespeichert werden das ganze wieder mit:

    PHP-Code:
    ob_start(); 
    Nach den ganzen Ausgaben schreiben wir dann noch den Inhalt vom Puffer in die Cache Datei mit:

    PHP-Code:
       file_put_contents('dynamic_cache/mediadaten.txt'ob_get_flush() ); 
    Zu guter letzt kommt noch der Teil aus der else Schleife mit dem wir - sofern vorhanden - die gecachten Mediadaten laden und ausgeben:

    PHP-Code:
    }else{
     echo 
    file_get_contents('dynamic_cache/mediadaten.txt');

    Das wars auch schon

    Der Mediadaten Cache 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>
    Diskutiere nie mit Idioten - sie holen Dich auf ihr Niveau und schlagen Dich dort mit Erfahrung!



  2. #2
    Erfahrener Benutzer Avatar von Dreamerweb
    Registriert seit
    19.12.2006
    Beiträge
    373
    Hallo

    Habe das bei mir mal getestet.

    Es wird im Verzeichnis dynamic_cache zwar eine Datei erstellt mediadaten.txt aber die datei ist leer. ist das so richtig? Eher nicht glaube ich mal.

  3. #3
    Erfahrener Benutzer Avatar von Gremlin
    Registriert seit
    05.07.2006
    Beiträge
    5.206
    Nein das ist nicht korrekt kannst du mal deine mediadaten.php posten? Gerne auch per PM.

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



  4. #4
    Erfahrener Benutzer
    Registriert seit
    22.12.2006
    Beiträge
    526
    Wer das ganze auch mit php4 benutzen will, der sollte folgendes in die Datei einfügen:
    PHP-Code:
    if (!function_exists('file_put_contents')) {
     function 
    file_put_contents($filename$data) {
      if ((
    $h = @fopen($filename'w')) === false) {
       return 
    false;
      }
      if ((
    $bytes = @fwrite($h$data)) === false) {
       return 
    false;
      }
      
    fclose($h);
      return 
    $bytes;
     }


  5. #5
    Erfahrener Benutzer Avatar von Dreamerweb
    Registriert seit
    19.12.2006
    Beiträge
    373
    Zitat Zitat von Gremlin Beitrag anzeigen
    Nein das ist nicht korrekt kannst du mal deine mediadaten.php posten? Gerne auch per PM.

    Gruß
    Gremlin
    Hallo

    Dank Dir jetzt läuft es auch bei mir. War mein eigener Fehler.

    Hatte diese Zeile

    PHP-Code:
    file_put_contents('dynamic_cache/mediadaten.txt'ob_get_flush() ); 
    nicht ans ende sondern noch am Anfang stehen.

  6. #6
    Benutzer1699
    Gast
    Ich halte 15 Minuten für übertrieben, halbe Stunde oder Stunde wäre eine Zeit mit der Server und Besucher denke ich gut leben können *g* - aber das wollte ich gar nicht.

    Mir ist noch die Idee gekommen, dass man die Generierung des Nachts oder des Tages (je nach Userverhalten) häufiger bzw. seltener laufen lassen könnte.
    Optimalerweise automatisch per Cronjob, damit man nicht auf einen Aufruf angewiesen ist.

    @Gremlin:
    Daumen hoch für die Mindestvorraussetzung von PHP5 hehe.

  7. #7
    Erfahrener Benutzer Avatar von Gremlin
    Registriert seit
    05.07.2006
    Beiträge
    5.206
    Daumen hoch für die Mindestvorraussetzung von PHP5 hehe.
    PHP4 hab ich nicht und will ich nicht deshalb PHP5 *g Holstenjungs hat aber ja ein Workaround geschrieben
    Diskutiere nie mit Idioten - sie holen Dich auf ihr Niveau und schlagen Dich dort mit Erfahrung!



  8. #8
    Erfahrener Benutzer
    Registriert seit
    22.12.2006
    Beiträge
    526
    Das habe ich nicht geschrieben, diese Funktion ist die Standardfunktion für php4. Also für die Leute die es da benutzen wollen. Das ist auch zuhauf bei Google zu finden oder sogar in einem PHP Handbuch.

    MfG

  9. #9
    Erfahrener Benutzer Avatar von SebbyPHM
    Registriert seit
    17.07.2006
    Beiträge
    844
    da ich das so ca auch benötige zukünfitg, hier mal meine kleine sache
    >> damit verschwindet diese elendige if-else-bdingung =)


    php5:
    PHP-Code:
    <?php
    function start_cache ($name$time=900) {
        if (!
    file_exists ('cache/'.$name) || filemtime ('cache/'.$name) < (time()-$time)) ob_start ();
        else {
            
    file_get_contents ('cache/'.$name);
            require (
    'lib/footer.php'); // fuer das VMS den Footer einbinden
            
    exit; // ... und anschliessen alles beenden
        
    }
        
    $GLOBALS['cachename'] = $name;
    }

    function 
    end_cache () {
        if (isset (
    $GLOBALS['cachename'])) file_put_contents ('cache/'.$GLOBALS['cachename'], ob_get_flush ());
    }
    ?>

    php4:
    PHP-Code:
    <?php
    function start_cache ($name$time=600) {
        if (!
    file_exists ('cache/'.$name) || filemtime ('cache/'.$name) < (time()-$time)) ob_start ();
        else {
            echo 
    implode (''file('cache/'.$name));
            require (
    'lib/footer.php'); // fuer das VMS den Footer einbinden
            
    exit; // ... und anschliessen alles beenden
        
    }
        
    $GLOBALS['cachename'] = $name;
    }

    function 
    end_cache () {
        if (isset (
    $GLOBALS['cachename'])) {
            
    $f = @fopen ('cache/'.$GLOBALS['cachename'], 'w') or die ('Kann Cache-Datei nicht oeffnen.');
            
    fwrite ($fob_get_contents ());
            
    fclose ($f);
        }
    }
    ?>
    aufruf:
    PHP-Code:
    <?php
    start_cache 
    ('test'10);
    echo 
    'Diese Datei wurde das letzte mal am '.date('d.m.Y').' um '.date('H:i:s').' Uhr ge&auml;ndert.';
    end_cache ();
    ?>
    Mit freundlichem Gruß
    SebbyPHM




Ähnliche Themen

  1. [Tutorial] Statspicker mit Cache
    Von Gremlin im Forum [HD] Programmieren
    Antworten: 30
    Letzter Beitrag: 29.04.2011, 22:05
  2. Zugangsanfrage VMS-Tutorial.de
    Von eaxo im Forum Support zu Addons & Erweiterungen
    Antworten: 1
    Letzter Beitrag: 09.01.2010, 18:07
  3. tutorial zum faken?
    Von didith1207 im Forum Talk, talk, talk...
    Antworten: 9
    Letzter Beitrag: 08.12.2008, 22:22
  4. CSS uns JavaScript cachen
    Von Benutzer1699 im Forum [HD] Programmieren
    Antworten: 1
    Letzter Beitrag: 30.05.2008, 14:59

Berechtigungen

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