[Support] Caching einer PHP-Anwendung
Christof Thalhofer
chrisml at deganius.de
Sat Sep 2 16:17:00 CEST 2006
Hi Michael,
> eine PHP-Anwendung generiert HTML-Code und zahlreiche Grafiken
> dynamisch.
>
> Zumindest die Grafiken würde ich gern einige Zeit cachen, um die
> Performance zu erhöhen und den Hive zu entlasten. Es könnten damit
> rund 80% der PHP-Starts eingespart werden.
...
> Welche Möglichkeiten habe ich? Wäre es möglich, das Caching für
> mod_proxy wieder zu aktiveren? (Wir hatten es damals im Zusammenhang
> mit dem Leerzeichenproblem ausgeschaltet).
... Ich halte einen Cache via Apache mod_proxy (besser wäre Squid) nicht
für ganz optimal. Denn nach einer gewissen Zeit mußt Du die Grafiken
wieder generieren, ob nun notwendig (weil geändert) oder nicht. Und wenn
sich die grundlegenden Daten geändert haben, zeigen die Grafiken aber
noch eine ganze Weile die veraltete Version, für den von Dir definierten
Zeitraum, bis der Cache sie neu einliest.
> Das Problem: auch für "304 Not Modified"-Antworten muss PHP/CGI
> gestartet werden.
...
> Gibt es Alternativen?
Ein Trick, den wir nutzen (für HTML-Seiten, aber warum soll das nicht
auch für Grafiken gehen):
Das Error-Dokument ist ein PHP-Skript, der die Seiten dynamisch
erstellt, in eine Variable schreibt und als Dateien auf Platte speichert.
in .htaccess kannst Du schreiben:
ErrorDocument 403 /create.php
ErrorDocument 404 /create.php
In /create.php steht als Hauptfunktionalität:
<?
$req = $_SERVER["REQUEST_URI"];
//... diverser Code um daraus $pathfile zu machen
// $pathfile ist der komplette Pfad inklusive Dateinamen
//... diverser Code zur Erstellung der Webseite in der Variablen $cont
// $cont ist die HTML-Seite in einer Variable
$file = fopen( $pathfile, "w");
//Speichern
fputs( $file, $cont);
fclose( $file);
//Anzeigen
echo $cont;
?>
Zum Updaten einer Seite ist nur notwendig, nach Update der zugehörigen
Daten, sie (die Seite) zu löschen. Dann wird nur beim ersten User, der
die Seite sehen will, dynamisch generiert. Allen folgenden Besucher
werden statische Seiten geliefert, bis zum nächsten Update. Der
Performancegewinn ist enorm.
Nachteil dieser Methode ist nur, dass Du im Errorlog pro dynamischer
Generierung eine Logzeile bekommst.
Alles Gute
Christof
More information about the Support
mailing list