Cache-Control bei Bildern
Voodoo
- php
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?
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
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
Hello,
header("HTTP/1.0 304 Not Modified");
Funtioniert hier nicht, da anscheinend immer nur eine font.php gecacht wird, egal welche Parameterheader("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