gambler
Themenersteller
Student
Guru (101 Beiträge)

HTML komprimieren mittels PHP

am 11.04.2010, 14:59 Uhr eröffnete gambler folgenden Thread
PHP & MySQL    5309 mal gelesen    6 Antwort(en).

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


Belegungsplan Ferienwohnung
Blog: Smart-Webentwicklung

UFOMelkor
Avatar UFOMelkor
Student
Content Meister (350 Beiträge)
am 11.04.2010, 15:30 Uhr schrieb UFOMelkor

Die zlib-Blibliothek müsste eigentlich etwas passendes bieten.


Naturkosmetik in Bochum

Steppenhahn Ultramarathon-Community

Raptor
Avatar Raptor
IT-Student
Content Gott (1013 Beiträge)
am 11.04.2010, 15:34 Uhr schrieb Raptor

Die gesuchte Funktion heisst gzencode():

<?php $komprimierter_inhalt = gzencode($datei_inhalt); ?>


Meine Developer-Website mit den Web-Entwickler-Tools.
Meine Web-Entwicklungs-Dienstleistungen

[url="http://www.seitenreport.de/forum/beitraege/seitenreport_verlosungen/wichtig_neue_regel

gambler
Student
Guru (101 Beiträge)
am 11.04.2010, 16:48 Uhr schrieb gambler

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


Belegungsplan Ferienwohnung
Blog: Smart-Webentwicklung

Raptor
Avatar Raptor
IT-Student
Content Gott (1013 Beiträge)
am 11.04.2010, 17:56 Uhr schrieb Raptor

Im Grunde kann man es so lösen:

<?php
if(stripos($_SERVER[\'HTTP_ACCEPT_ENCODING\'], \'gzip\')===false){
// gzip wird nicht unterstützt
}
?>


Meine Developer-Website mit den Web-Entwickler-Tools.
Meine Web-Entwicklungs-Dienstleistungen

[url="http://www.seitenreport.de/forum/beitraege/seitenreport_verlosungen/wichtig_neue_regel

doc4pc
Angestellt
Fortgeschrittener (57 Beiträge)
am 14.04.2010, 16:34 Uhr schrieb doc4pc

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


Stempel bestellen beim Profi:
http://stempelprofi.de
http://stempel-kahle.de

gambler
Student
Guru (101 Beiträge)
am 14.04.2010, 17:44 Uhr schrieb gambler

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


Belegungsplan Ferienwohnung
Blog: Smart-Webentwicklung

  • 1


« zurück zu: PHP & MySQL

Das Seitenreport Forum hat aktuell 5274 Themen und 36108 Beiträge.
Insgesamt sind 48346 Mitglieder registriert.