<?php
/* Festlegen der Konfiguration */
# Das Cache-Verzeichnis als absoluter oder relativer Pfad auf dem Dateisystem:
define( 'FTX_CACHE_DIR' , './cache/' );
# Wie viele Sekunden soll der Cache gültig sein?
# 0 oder FALSE - Caching ist aus
# '~' - unbegrenzt (Vorsicht! Sie müssen den Cache "manuell" löschen)
define( 'FTX_CACHE_TIME' , 84600 );
# Maximale Cache-Dauer der User-Agents
define( 'FTX_EXT_CACHE_TIME' , 84600 );
# Sollen mit POST gesendete Daten beachtet werden?
define( 'FTX_CACHE_USE_POST' , TRUE );
# Sollen Cookies beachtet werden?
define( 'FTX_CACHE_USE_COOKIE' , TRUE );
# Sollen SESSIONS beachtet werden?
define( 'FTX_CACHE_USE_SESSION' , TRUE );
/*
Wichtig! Eventuell muss session_start() aus dem originalen Skript hier her vorgezogen werden.
*/
/* Das Ermitteln des Namens für das Cachefile */
if( FTX_CACHE_TIME ) {
$s = $_SERVER['REQUEST_URI'];
/* Falls POST-Daten gesendet wurden: */
if( FTX_CACHE_USE_POST
&& isset( $_POST ) && count( $_POST ) ) {
}
/* Falls Cookies gesendet wurden: */
if( CACHE_USE_COOKIE
&& isset( $_COOKIE ) && count( $_COOKIE ) ) {
}
/* Falls eine Session besteht: */
if( FTX_CACHE_USE_SESSION
&& isset($_SESSION) && count( $_SESSION ) ) {
}
/* Der Name muss sicher sein, denn er wird in das Dateisystem geschrieben - md5() liefert was wir brauchen */
define ( 'FTX_CACHE_FILE' , FTX_CACHE_DIR
. md5($s) . '.gz' );
/* Soll die Lebensdauer des Caches begrenzt sein? */
if( '~' != FTX_CACHE_TIME ) {
/* Jetzt müssen wir nachsehen, ob ein Cachefile existiert, welches eventuell veraltet ist: */
if( filemtime( FTX_CACHE_FILE
) < ( time() - FTX_CACHE_TIME
) ) {
/* und das veraltete Cachefile löschen: */
}
}
/* Prüfen, ob Cachefile (jetzt noch) vorhanden und lesbar ist: */
/* Die Webseiten können natürlich auch lokal (im Browsercache oder auf einem Proxyserver) gecached werden: */
if( '~' == FTX_CACHE_TIME || FTX_CACHE_TIME > FTX_CACHE_TIME ) {
/* 24 Stunden statt unendlich */
$extCacheTime = FTX_EXT_CACHE_TIME;
} else {
$extCacheTime = FTX_CACHE_TIME;
}
if( $extCacheTime ) {
header("Expires: " . gmdate("D, d M Y H:i:s", time() + $extCacheTime) . " GMT");
header("Cache-Control: public, max-age=" . $extCacheTime);
}
/* Mag der User-Agent gezippte Daten? */
if( false === strpos( $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip' ) ) {
/* Falls nicht packen wir nämlich für Ihn aus: */
exec( 'gzip -dc < '.FTX_CACHE_FILE
);
} else {
/* Falls ja, und das ist meistens der Fall, senden wir den Header und die gepackten Daten */
header( 'Vary: Accept-Encoding' );
header( 'Content-Encoding: gzip' );
}
}
}
/*
Wenn das Skript hier noch nicht über ein exit gestolpert ist, dann muss eben alles
neu errechnet werden. Um die Ausgaben in einem Puffer einzufangen bemühen wir 'ob_start()';
*/
/*
########################################################################################
# #
# Ihr bisheriges PHP-Skript bleibt (bis auf das eventuelle Vorziehen des #
# Startes der Session unangetastet! #
# Es sollte an dieser Stelle stehen und diesen Kommentar ersetzen. #
# #
########################################################################################
*/
/* Wir prüfen, ob überhaupt gecacht wird: */
if( FTX_CACHE_TIME
&& defined( FTX_CACHE_FILE
) ) {
/* Schreiben des gezippten Cache-Files: */
/* Suchen und Löschen veralteter Cache-Daten: */
if( '~' != FTX_CACHE_TIME ) {
$d = dir( FTX_CACHE_DIR
);
while ( FALSE !== ( $f = $d->read() ) ) {
$file = FTX_CACHE_DIR . $f;
}
}
}
}
}
/* In jedem Fall geben wir die Daten aus dem Puffer aus: */
?>