hanns: imagettftext und browser cache

hallo,

ich habe ein großes transfervolumen auf
meiner website festgestellt.

ich erzeuge bilder mit imagettftext,
also bild mit text.

diese bilder werden von den usern sehr oft
aufgerufen.

frage: werden die aus dem browser-cache geholt
oder werden die immer wieder neu von meinem server
abgerufen???

src="phpgrafik433.php"

was kann ich tun, damit die nicht neu geladen,
sondern aus dem cache genommen werden?

gruss
hanns

  1. Hi,

    frage: werden die aus dem browser-cache geholt
    oder werden die immer wieder neu von meinem server
    abgerufen???

    src="phpgrafik433.php"

    Per Default ist PHP so eingestellt, dass die Scripte HTTP-Header erzeugen, die das Cashing unterbinden sollen.

    was kann ich tun, damit die nicht neu geladen,
    sondern aus dem cache genommen werden?

    Entsprechend andere Header ausgeben - siehe Manual bzgl. header.

    Und darüber, ob es u.U. sinnvoll wäre, aus den Bildern statische Dateien auf Platte zu erzeugen, sollte man auch nachdenken.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Entsprechend andere Header ausgeben - siehe Manual bzgl. header.

      danke!!!

      aber wenn ich andere header ausgebe, kann ich das dann
      spezielle nur für die grafiken tun, weil die anderen php-seiten
      werden immer neu erzeugt und müssen bzw. sollen immer neu geladen
      werden.

      1. Hallo,

        aber wenn ich andere header ausgebe, kann ich das dann spezielle nur für die grafiken tun, weil die anderen php-seiten werden immer neu erzeugt und müssen bzw. sollen immer neu geladen werden.

        natürlich, HTTP-Header gelten ja immer nur für die Ressource, mit der sie gesendet werden.

        Ciao,
         Martin

        --
        In der Theorie stimmen Theorie und Praxis genau überein.
        1. natürlich, HTTP-Header gelten ja immer nur für die Ressource, mit der sie gesendet werden.

          wie sieht denn der code aus?
          das gegenteil von diesem hier?
          wenn ja, wie lautet das gegenteil?

          <?php
          header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
          ?>

          1. Hallo,

            »» natürlich, HTTP-Header gelten ja immer nur für die Ressource, mit der sie gesendet werden.
            wie sieht denn der code aus?

            das wird wohl eine header()-Anweisung mit einem gültigen HTTP-Header als Parameter sein. ;-)

            das gegenteil von diesem hier?
            wenn ja, wie lautet das gegenteil?

            Gute Frage. Was ist das Gegenteil von einer Ziege?[*]
            Die HTTP-Spec legt nahe, dass ein Expires-Header für deine Aufgabenstellung wohl geeignet wäre.

            So long,
             Martin

            [*] Zu einer sprachlich unsinnigen Verwendung des Begriffs "Gegenteil" sagte mein Chemielehrer einst zu einem Schüler: "Wenn du Jörg heißt, und ich Hermann, das ist das doch nicht das Gegenteil, sondern bloß etwas anderes!"

            --
            Theorie ist, wenn jeder weiß, wie's geht, und es geht trotzdem nicht.
            Praxis ist, wenn's geht, und keiner weiß warum.
            Bei uns sind Theorie und Praxis vereint: Nichts geht, und keiner weiß warum.
  2. Hello,

    ich habe ein großes transfervolumen auf
    meiner website festgestellt.

    ich erzeuge bilder mit imagettftext,
    also bild mit text.

    diese bilder werden von den usern sehr oft
    aufgerufen.

    frage: werden die aus dem browser-cache geholt
    oder werden die immer wieder neu von meinem server
    abgerufen???

    Das entscheidet der jeweilige Browser.
    Bei passender Einstellung (Normalfall) schaut der bei jedem Request erst im Cache nach, ob er dort einen Eintrag findet.

    Wenn Du beim Ausliefern der Ressource einen Header mitsendest:

    z.B:

    $last_modified = @gmdate('D, d M Y H:i:s',@filemtime(PICPATH.$filename)).' GMT';
         header ("Last-Modified: $last_modified");

    dann wird der Browser beim Anfragen vermutlich einen Request-Header mitsenden:

    $_SERVER['HTTP_IF_MODIFIED_SINCE']

    Den kannst Du dann nach entsprechender Decodierung mit dem aktuellen $last_modified vergleichen
    und wenn Gleichheit vorliegt, dem Browser mitteilen, dass er bitte seinen Cache benutzen soll:

    header("HTTP/1.0 304 Not Modified");
         header("Cache-Control: max-age=86400, must-revalidate");

    und z.B. erst nach Ableuf eines Tages wieder einen Request senden soll, also solange _nur_ seinen Cache benutzen soll.

    Es sind also mehrere Dinge zu beachten.

    Wie ist der Browser überhaupt drauf?
    Der IE regelt das z.B. so:

    • Automatisch: er schaut, ob er einen Zeitstempel zur Ressource hat und
           eine Gültigkeit für diese und fragt nach, wenn die Gültigkeitsdauer
           abgelaufen ist. Dann sendet er auch seinen Zeitstempel der Ressource mit
    • Nie: hat er eine Ressource im Cache, nutzt er immer den Cache
    • Bei jedem Zugriff: Er fragt immer nach der Ressource. Ob er dann den
           Zeitstempel mitsendet, wenn er einen hat, hängt vom Brwoser ab
    • Nach jedem Start: Er fragt immer nur beim ersten Zugriff nach dem Start nach,
           ob die Ressource neu ist. Dabei sendet er aber auch den Zeitstempel mit,
           wenn er einen hat.

    Kurz gesagt:
    Wenn Du beim Ausliefern von Ressourcen keinen Zeitstempel und keine Gültigkeitsdauer dafür mitsendest, kann der Browser diese nicht beachten. Du kannst auf dem Server also nicht sicher entscheiden, ob die Ressource neu erstellt und vollständig ausgeliefert werden muss, weil Du nicht weißt, welchen Stand der Browser bereits kennt.

    Schau dir die entsprechenden Request-Header des Browsers an.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. vielen dank!

      hanns

  3. was kann ich tun, damit die nicht neu geladen,
    sondern aus dem cache genommen werden?

    »

    http://phpperformance.de/http-cache-control-ein-buch-mit-sieben-siegeln/

    Peter