<a href="-luan-381"></a> <a href=""></a> <a href="-couple-name-2347"></a> <a…
von:
VPNwelt.com sucht Feedback Wie der Name schon sagt handelt es sich um eine Review Website für…
von: florian.berg.privat
Hi,
ich bräuchte grade mal einen Denkanstoß!
Per PHP erzeuge ich mir eine Cache-Datei im HTML-Format:
<?php
// Pfad und Name der Cache-Datei
$cacheDatei = "cache.htm";
// Gültigkeitsdauer in Sekunden
$cacheDauer = 3600;
// Prüfen ob Cache-Datei existiert und noch gültig ist
if (file_exists($cacheDatei) &&
(time() - filemtime($cacheDatei)) < $cacheDauer)
{
// statt dynamische Page generieren zu lassen
// includen wir statische Cache-Datei
include($cacheDatei);
exit();
}
// Der interne Ausgabe-Puffer wird aktiviert
ob_start();
/*Inhalt der angeforderten Seite*/
//Puffer leeren und in Cache-Datei schreiben
file_put_contents($cacheDatei, ob_get_flush());
Soweit so gut...da ich nicht viele Datenbankanfragen oder ressourcenlastige Funktionen in meinen PHP-Dateien ausführe, bringt mir die nun reine HTML-Cache-Datei nicht viel, außer zusätzlichen Speicherplatz der benötigt wird für die Cache-Datei. Eigentlich wollte ich nun zusätzlich zu dieser Cache-Datei noch eine komprimierte gzip-Version dieser statischen Datei erstellen lassen, leider fällt mir grade nicht ein, wie man das in PHP am besten umsetzt.
Ich stelle mir das halt so vor:
file_put_contents($cacheDatei, ob_get_flush());
//Erzeuge gzip-Datei($cacheDatei)
Kann mir hier jemand mal bitte auf die Sprünge helfen und sagen, wie ich das am sinnvollsten umgesetzt bekomme?
Danke schon mal für Eure Antworten ;
Gruß Stephan
Die zlib-Blibliothek müsste eigentlich etwas passendes bieten.
Die gesuchte Funktion heisst gzencode(): <?php $komprimierter_inhalt = gzencode($datei_inhalt); ?>
Danke für die Tipps. Jetzt klappt es schon mal, dass eine cache.htm und eine cache.htm.gz erstellt werden.
Ein weiteres Problem was mich nun beschäftigt, ist die Frage, ob bezogen auf den folgenden Code, der Webserver die unkomprimierte cache.htm Datei sendet, falls ein Browser die Seite aufruft, der gzip nicht unterstützt?
<?php
//Pfad und Name der Cache-Dateien
$cacheDatei="cache.htm";
$cacheDateiGzip="cache.htm.gz";
//Gültigkeitsdauer in Sekunden
$cacheDauer=3600;
//prüfen ob Cache-Dateien existieren und gültig sind
if (file_exists($cacheDatei)&&file_exists($cacheDateiGzip)
&&(time()-filemtime($cacheDatei))<$cacheDauer)
{
//statt Page dynamisch zu generieren wird
//statisch komprimierte HTML-Datei eingebunden
header("Content-Encoding: gzip");
include($cacheDateiGzip);
exit();
}
// [...]
Da ich ja explizit die cache.htm.gz Datei include und auch der Header mit gzip Angabe ist, wird der Webserver, wohl nicht automatisch die unkomprimierte Datei senden, wenn der Browser Komprimierung nicht unterstützt oder?
Kann man eventuell mit einer Funktion überprüfen, ob der Browser gzip unterstützt? Ich bin leider nicht so gut in PHP, aber ich würde mir das so vorstellen:
<?php
//Pfad und Name der Cache-Dateien
$cacheDatei="cache.htm";
$cacheDateiGzip="cache.htm.gz";
//Gültigkeitsdauer in Sekunden
$cacheDauer=3600;
//prüfen ob Cache-Dateien existieren und gültig sind
if (file_exists($cacheDatei)&&file_exists($cacheDateiGzip)
&&(time()-filemtime($cacheDatei))<$cacheDauer)
{
if(BrowserUnterstütztGzip == false)
{
include($cacheDatei);
exit();
}
//statt Page dynamisch zu generieren wird
//statisch komprimierte HTML-Datei eingebunden
header("Content-Encoding: gzip");
include($cacheDateiGzip);
exit();
}
// [...]
Ich habe bereits mit ob_gzhandler() es versucht, aber bekomme das irgendwie nicht so hin.
Tipps sind stehts willkommen...
Gruß Stephan
Im Grunde kann man es so lösen: <?php
if(stripos($_SERVER[\'HTTP_ACCEPT_ENCODING\'], \'gzip\')===false){
// gzip wird nicht unterstützt
}
?>
Du kannst auch ob_start gleich zum zippen bewegen:
ob_start("ob_gzhandler");
Das ist vielleicht minimal schneller als ein extra aufruf zum Zippen, habe aber noch nicht nachgemessen.
LG
Andreas
doc4pc schrieb:
Du kannst auch ob_start gleich zum zippen bewegen:
ob_start("ob_gzhandler");
Das ist vielleicht minimal schneller als ein extra aufruf zum Zippen, habe aber noch nicht nachgemessen.
LG
Andreas
Hi Andreas,
das geht natürlich auch, aber dann ist doch im Puffer schon der komprimierte Content?! Genau das wollte ich nicht, sondern ich wollte den Content sowohl unkomprimiert als auch komprimiert in jeweils einer Datei speichern. Ich wollte halt sicherstellen, dass ein Besucher meiner Website die unkomprimierte Fassung erhält, wenn sein Browser kein gzip unterstützt. Um ehrlich zu sein, weiß ich nicht ob das überhaupt notwendig ist - gibt es noch Browser die gzip von Haus aus nicht unterstützen?
Gruß Stephan
Beitrag erstellen
EinloggenKostenlos registrieren