PHP Mod-Time Skript
Änderungsdatum von dynamischen Webseiten
Dynamische Webseiten werden erst direkt beim Aufruf erstellt. Darum senden die meisten Webserver auch
Datum und Uhrzeit der Auslieferung als Änderungsdatum (modification time) der Seite mit. Dadurch muss
der Browser die Seite bei jedem Besuch erneut vollständig vom Server laden.
Die meisten Seiten die zwar dynamisch z.B. mit PHP ausgeliefert werden, haben jedoch einen statischen
Inhalt bzw. werden nicht jede Sekunde aktualisiert.
Anwendung
Um den Browsern auch das Cachen von dynamisch erstellten Seiten zu ermöglichen ist es notwendig das
Datum der letzten Änderung der Seite dem Browser selbst zu übergeben. In PHP kann dazu die
"header()" Funktion verwendet werden.
Ein Header kann aber nur dann gesendet werden, wenn noch keine Daten an den Browser geschickt wurden.
D.h. man muss das Änderungsdatum vor der ersten Ausgabe schicken, oder man leitet die gesamte Ausgabe
mit Hilfe von "ob_start()" in den "output buffer" um.
Folgende Funktion wird z.B. mit dem Änderungsdatum einer Datei als Argument aufgerufen
http_header_last_modified(filemtime(__FILE__));
und gibt je nach Änderungsdatum das der Browser für die bereits gecachte Seite übergeben hat den
Inhalt der Seite weiter aus oder beendet die Ausführung des Skripts und sendet einen
"Not Modified" HTTP-Header aus.
Natürlich kann auch das Änderungsdatum eines Datenbankeintrages als Argument verwendet werden.
Das Skript
/* send HTTP-Header "Last-Modified" with given timestamp
*/
function http_header_last_modified($modtime_page)
{
$modtime_cache = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
&& $modtime_page <= $modtime_cache)
{
header("HTTP/1.1 304 Not Modified");
ob_end_clean();
exit;
}
$last_mod_header = "Last-Modified: ";
$last_mod_header .= gmdate("D, d M Y H:i:s", $modtime_page);
$last_mod_header .= " GMT";
header($last_mod_header, true);
}
Funktionstest
Im Browser selbst kann man die Funktionsweise des Skripts nicht überprüfen, da man sich dazu die HTTP-Header ansehen muss. Am besten benutzt man dazu den Web-Sniffer.