Text für Suchenmaske:
cache kontrolle Internet Explorer aktualisieren reload refresh update temp temporäre
Anmerkung:
Viele von euch kennen das Problem oder haben sich schon mal bei einer Dynamischen Webseite gewundert das die Seiten nicht Aktualisiert wurden. Für dieses sache gibt es in PHP die so genannten
HEADER Funktionen oder die
HTTP Header Spezifikation Diese Spezifikation sollte wie es der Name auch schon sagt im Dateikopf stehen. Also bevor PHP mit dem Interpretieren der ganzen Seite beginnt. Für den Cache Controll stehen in PHP ebenfalls Funktionen zur Verfügung die man in diesen Headerblock mit einfügt die Standard Befehle zum Steuern dieses Problems lauten
Last-Modified, Cache-Control und Pragma. Diese werden auch von allen Browsern Interpretiert einzige Ausnahme ist Micros... die hier wieder ihr eigenes Süppchen kochen müssen, hierzu Später mehr. Einen Typischen Cache-Control Header findet ihr mit genauen erläuterungen in der
PHP-Maunal.
In dem folgenden Beispiel erlauben wir das Caching, legen aber eine befristete Zeit fest bis das die Seite verfallen oder Aktualisiert werden muß. Viele Befehle kommen euch bekannt vor, ich möchte aber einen kurz erläutern,
getlastmod() nimmt die Zeit der letzten Änderung der Aktuell aufgerufenen Seite. Expires und Last-Modified gehören zusammen und bringen nur dann ihre Funktion! Genauere Info findet ihr in den oben aufgeführten Links.
Beispiel Cachesteuerung:
|
PHP Source code
|
1
2
3
4
5
6
|
$LEBENSDAUER = 15; // Cache Lebensdauer (Minuten) HTTP 1.1
$EXPIRES = gmdate("D, d M Y H:i:s", time() + $LEBENSDAUER * 80) ." GMT";
$MODIFIED = gmdate("D, d M Y H:i:s", getlastmod()) ." GMT";
header("Expires: " . $EXPIRES);// HTTP 1.0
header("Last-Modified: " . $MODIFIED);// HTTP 1.0
header("Cache-Control: public, max-age=" . $LEBENSDAUER * 60);// HTTP 1.1
|
Wenn ihr das Caching unterbinden möchtet ist folgender Code angesagt.
Beispiel kein Caching:
|
PHP Source code
|
1
2
3
4
|
header("Expires: Mon, 13 Jul 1997 02:00:00 GMT");// HTTP 1.0
header("Last-Modified: " . gmdate("D, d M Y H:i:s") ." GMT");// HTTP 1.0
header("Cache-Control: no-cache");// HTTP 1.1
header("Pragma: no-cache");// HTTP 1.1
|
Der Trick hierbei ist Relativ einfach, bei Expires fügt ihr ein Datum ein das schon lange verstrichen ist. Bei HTTP1.1 Cache-Control reicht ein einfaches no-cache oder Pragma no-cache aus. Diese werden von allen Browsern interpretiert und angenommen. Ausnahme hierbei ist der IE 5 und 6. Warum Mircoschr... hier mal wieder eine Extratour machen muste weiß keiner aber mittlerweile sind wir das von Redmond ja gewohnt, genug gewettert jetzt des Rätzels Lösung.
Wie schon angedeutet werden Pragma und no-cache im IE nicht Interpretiert ? hier gibt es drei Befehle auf die ich jetzt etwas genauer eingehen werde.
No-Check Post-Check Pre-Check
- No-Check = Besagt das der Client kein Cachekontrolle durchführen soll. Kurz ? Es wird gecached aber nie Aktualisiert!
- Post-Check = Der Client vergleicht den Browsercache mit der Seite nach einer vorgegebenen Zeit (interval expires) Wenn nicht angegeben dann Aktiv und wird vom Browser selbst Verwaltet.
- Pre-Check = Der Browser fragt die Webseite auf die letzte Aktualisierung ab und vergleicht bei einem Unterschied den Cache mit der Seite. Es wird die Zeit der Letzten Änderung genommen, also das Datum der Datei.
Und genau hier liegt der Bock begraben. Wenn man eine SWF Datei in den Browsercache lädt. Aber nun in dieser SWF Datei ein Verknüpfung zu einer auf dem Server befindlichen Datei setzt. Kann der IE diese nicht vergleichen und Aktualisieren. Daher wird eine gewollte Cache Steuerung unter IE in Verbindung mit Flash nicht funktionieren. Weil sein Cache-Control sich nur auf das Datum der Datei und Scripting konzentriert. Die einzige Möglichkeit dieses Problem zu umgehen, ist den Cache des IE zu deaktivieren oder Besser gesagt im zu untersagen diese Seiten zu cachen!
|
PHP Source code
|
1
|
header("Cache-Control: post-check=0, pre-check=0", FALSE);
|
oder - wenn ihr nur eine HTML Seite verwendet.
|
PHP Source code
|
1
2
|
<meta http-equiv="Cache-Control" content="post-check=0">
<meta http-equiv="Cache-Control" content="pre-check=0">
|
Des weiteren könnt ihr auch mit .htaccess das Chachen von Seiten Steuern. In dem ihr ? wenn vorhanden ? wenn Mode-Expires aktiv? Folgendes in die .htaccess eintragt.
|
PHP Source code
|
1
2
|
ExpiresActive on
ExpiresDefault "access plus 60 seconds"
|
Besagt das die Seite 60 Sekunden nach dem letzten Zugriff ungültig ist und somit neu geladen werden muss.
mfg Ming