PHP-Seiten cachen mit PEAR-Caching

10 11 2008

Wenn man ganze Seiten die mit PHP erzeugt wurden cachen will kann man die PEAR-Bibliothek verwenden. Dort gibt es eine Klasse “CACHE” mit der sich einfach die komplette Ausgabe einer Webseite cachen lässt.

Benötigt wird:
PEAR-Cache (LINK)

Da die neue Version von PEAR-Cache wohl anders funktiniert als die von mir beschriebene, könnt Ihr hier die von mir behandelte Version runterladen. Damit sollte es hinhauen.
Einfach die Dateien in ein Verzeichnis “Cache” entpacken. Ausserdem ein weiteres Verzeichnis “cache” anlegen, in dem die Cache-Dateien gespeichert werden.

Will man eine komplette Seite zwischenspeichern, kann die Klasse wie folgt nutzen:

Am Anfang der PHP-Datei einfach folgenden Code setzen:

  <?
require_once ('Cache/Output.php');
$opts = array('cache_dir' => '/absoluter/pfad/zu/ordner/cache');
$cache = new Cache_Output('file', $opts);
$cache->fileLocking=true;
$id = $cache->generateID($_SERVER['REQUEST_URI']);
if(!$content = $cache->start($id)){
?>
HIER KANN DER KOMPLETTE SEITENINHALT FOLGEN
<?
$cache->endPrint(20000);
} else {
echo $content;
exit();
}
echo $content;
?>

Das ganze funktioniert wie folgt:
Per require_once wird die nötige Klasse eingebunden. Unter ‘cache_dir’ wird das zu nutzende Cache-Verzeichnis angegeben. Dann wird eine neue Klasse instanziert (new …). Per ‘fileLocking’ wird die Cache-Datei schreibgeschützt, damit sie nicht mehrmals geöffnet werden kann.
Interessant wird es bei ‘generateID’. Anhand dieser frei generierbaren ID wird geprüft ob eine Cache-Version der Datei vorliegt oder ob die Seite neu geladen wird. In der Regel kann man hier den Dateinamen bzw. die Datei-URL benutzen. Vielleicht auch noch in Verbindung mit gesetzten Variablen oder Cookie-Infos.
Am Ende wird dann die gecachte Version ausgegeben. Mir ‘endPrint’ kann man der Klasse mitteilen nach wievielen Sekunden die Cache-Version der Datei verfallen soll und auf jeden Fall einen neue Dateiversion geladen werden soll.

Weitere Infos zum Thema:
http://openbook.galileocomputing.de/php_pear/03_0_caching-002.htm