Voodoo: Cache-Control bei Bildern

Morgen,

Normalerweise werden Bilder ja vom Browser gecacht, aber ich hab da ein gewisses Problem mit dem Caching von On-The-Fly erzeugten Bildern. Je nach GET-Variablen wird ein Bild erzeugt (z.B Das).
Das Script sendet selbst keine Header-Angaben was das Caching angeht.
Ich hab es auch schon mit header("Cache-Control: public"); probiert, aber die Bilder werden trotzdem NICHT gecacht.

Hat da vielleicht jemand eine Idee?

  1. Hello,

    Das Script sendet selbst keine Header-Angaben was das Caching angeht.

    Warum nicht?

    scheint sowieso ein wenig merkwürdig zu sein, das Script
    Wenn man ein bisschen damit spielt
    http://maris.pytalhost.com/font/font.php?text='maris.pytalhost.com'&color=0x000000&bgcolor=0xffffff&size=22&font='fonts/times.ttf'

    kommt gleich eine hammermäßige Fehlermeldung,
    Fatal error: Allowed memory size of 25165824 bytes exhausted (tried to allocate 10377505 bytes) in /srv/www/httpd/phost/m/com/pytalhost/maris/web/font/package.graphics.php on line 1218

    10Mbyte zusätlich für so ein Bisschen Font ist doch Müll

    Das Stückchen Script müsste eigentlich sonst reichen, damit gecached wird.
    hier wird ein Bild angefordert mit dem Namen $filename

    // prüfen, ob das Bild im Server neuer ist als im Cache des Browsers

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

    if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))
      {
        // parse header
        $if_modified_since = preg_replace('/;.*$/', '', $_SERVER['HTTP_IF_MODIFIED_SINCE']);

    if ($if_modified_since == $last_modified)
        {
          // the browser's cache is still up to date
          header("HTTP/1.0 304 Not Modified");
          header("Cache-Control: max-age=86400, must-revalidate");
          return true;   ## Ausgabefunktion zuende, keine Daten senden
        }
      }

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

    1. Erstmal danke für die schnelle Antwort

      Fatal error: Allowed memory size of 25165824 bytes exhausted (tried to allocate 10377505 bytes) in /srv/www/httpd/phost/m/com/pytalhost/maris/web/font/package.graphics.php on line 1218

      10Mbyte zusätlich für so ein Bisschen Font ist doch Müll

      Ja, ein bisschen konfus ist es schon... aber um mal eben etwas zu generieren langt es.

      header("HTTP/1.0 304 Not Modified");

      Funtioniert hier nicht, da anscheinend immer nur eine font.php gecacht wird, egal welche Parameter

      header("Cache-Control: max-age=86400, must-revalidate");

      Tut hier allerdings genau was es soll =)
      Das Bild wird sich ja nicht ändern, bis die URI verändert wird und dann wird es ja eh neu geladen.

      Also vielen Dank

      Gruß
      Voodoo

      1. Hello,

        header("HTTP/1.0 304 Not Modified");
        Funtioniert hier nicht, da anscheinend immer nur eine font.php gecacht wird, egal welche Parameter

        header("Cache-Control: max-age=86400, must-revalidate");
        Tut hier allerdings genau was es soll =)
        Das Bild wird sich ja nicht ändern, bis die URI verändert wird und dann wird es ja eh neu geladen.

        Damt ider Browser überhaupt beim nächten Zugriff fragt, wie alt die Ressource ist, muss man ihm das auch einmal mitteilen:

        Das als Ausschnitt aus meinem Script.

        header (make_content_type($bildtyp));           ## stellt den Content-Type des Bildes zur Verfügung
          header ("Last-Modified: $last_modified");       ## last modified wie zuvor berechnet
          echo $picdata;                                  ## Die Bilddaten ...

        Soweit ich das bisher ausprobiert habe, fragen die Browser beim nächsten Mal nicht nach, wenn sie "Last-Modiefied: ..." nicht mitgeliefert bekommen haben mit den Daten.

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)