[PHP] Cache Control

The Prophet

Rear Admiral
Registriert
Aug. 2001
Beiträge
5.981
Nabend,

ich will mal ein bissel weiter ausholen um mein Problem verständlich zu machen. Ich habe eine index.php die das Menü erstellt und einige Grafiken enhält (PNG Dateien, Links, DIV etc..) In einer Switch Case Anweisung wird per GET die jeweilge Unterseite aufgerufen und unter das Menü gesetzt. Um die Ladezeit zu reduzieren (60 KB) habe ich mit der Cache Control experimentiert. Habe dazu auch ein paar Codes gefunden und verwendet. Funktioniert auch wunderbar, ist die Seite einmal geladen werden nur noch die Unterseiten geladen / aktualisiert.

Caching erlaubt - Public?
PHP:
$expire = 15;  // Lebensdauer der Seite im Cache in Minuten

$exp_gmt = gmdate("D, d M Y H:i:s", time() + $expire * 60) ." GMT";
$mod_gmt = gmdate("D, d M Y H:i:s", getlastmod()) ." GMT";

// HTTP 1.0
header("Expires: " . $exp_gmt);
header("Last-Modified: " . $mod_gmt);

// HTTP 1.1
header("Cache-Control: public, max-age=" . $expire * 60);

Caching erlaubt - Private?
PHP:
$expire = 15;  // Lebensdauer der Seite im Cache in Minuten

$mod_gmt = gmdate("D, d M Y H:i:s", getlastmod()) ." GMT";

// HTTP 1.0 kennt keine privaten Caches, also nix cachen
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . $mod_gmt);

// HTTP 1.1
header("Cache-Control: private, max-age=" . $expire * 60);

// MSIE 5.x special
header("Cache-Control: pre-check=" . $expire * 60, FALSE);

Quelle

Es gibt dabei nur ein Problem der Internet Explorer lädt nach der eingestellten Zeit noch immer aus dem Cache. Mit Strg + F5 kann man dies aufheben. FF und Opera haben kein Problem damit. Jemand nee Idee wie man das umgehen kann? Achja und wo genau steckt der Unterschied zwischen privaten und public Cache. Wenn man mal davon absieht das mit Private der Cache des Browser lokal auf dem PC gemeint ist.
 
Habe jetzt leider keine Zeit, um mich genauer mit deinem Problem zu befassen, aber ich benutze zur Senkung der Ladezeiten immer gzip-Komprimierung.
Im Header muss lediglich ein "Content-encoding: gzip" stehen und der Inhalt der Seite mit gzencode(string data [, int level [, int encoding_mode]]) komprimiert werden.

Wegen des Caching-Problems: Der MSIE hat da so seine Eigenarten, hier ist mal ein Artikel über das Thema im MSDN-Portal (die letzten Abschnitte des Artikels sind zutreffend):
http://msdn.microsoft.com/workshop/author/perf/perftips.asp#Use Cache-Control Extensions

( Noch was auf Deutsch: http://www.php-center.de/faq/faq-webserver.html#webserver-6 )
 
Zuletzt bearbeitet:
So danke schonmal die Links waren mir bekannt. GZIp werde ich mal testen...

mfg

/Edit 19.55 Uhr
PHP:
function gzip() { 
$encode = $_SERVER['HTTP_ACCEPT_ENCODING'];
ini_set('zlib.output_compression_level', 6);
if(ereg("gzip",$encode)) { 
	ob_start("ob_gzhandler"); 
} 
else { 
	ob_start(); 
	} 
}
Vor der HTML Auslieferung ruf ich dann die Funktion auf, funktioniert prächtig wobei ich mir bei ini_set nicht so sicher bin.
 
Zuletzt bearbeitet:

Ähnliche Themen

Zurück
Oben