Du bist hier:  Seitenreport    Forum    Web-Entwicklung    PHP & MySQL    HTML komprimieren mittels PHP

HTML komprimieren mittels PHP

Verfasst am: 11. 04. 2010 [14:59]
gambler
108 Beiträge
Student
Dabei seit: 01.10.2009

Aktiver Schreiber
Themenersteller

Beitrag hilfreich?

Hi,

ich bräuchte grade mal einen Denkanstoß!
Per PHP erzeuge ich mir eine Cache-Datei im HTML-Format:

PHP
<?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:
PHP
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



Verfasst am: 11. 04. 2010 [15:30]
UFOMelkor
353 Beiträge
Student
Dabei seit: 20.10.2009

☆ Content Bringer

Beitrag hilfreich?

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



Verfasst am: 11. 04. 2010 [15:34]
Raptor
1157 Beiträge
Moderator
IT-Student
Dabei seit: 10.05.2009

✭✭ Aktiver Seitenreport Vorantreiber

Beitrag hilfreich?

Die gesuchte Funktion heisst gzencode():

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




Verfasst am: 11. 04. 2010 [16:48]
gambler
108 Beiträge
Student
Dabei seit: 01.10.2009

Aktiver Schreiber
Themenersteller

Beitrag hilfreich?

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
<?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
<?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



Verfasst am: 11. 04. 2010 [17:56]
Raptor
1157 Beiträge
Moderator
IT-Student
Dabei seit: 10.05.2009

✭✭ Aktiver Seitenreport Vorantreiber

Beitrag hilfreich?

Im Grunde kann man es so lösen:

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




Verfasst am: 14. 04. 2010 [16:34]
doc4pc
59 Beiträge
Angestellt
Dabei seit: 16.11.2009

Ab und An Schreiber

Beitrag hilfreich?

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


Verfasst am: 14. 04. 2010 [17:44]
gambler
108 Beiträge
Student
Dabei seit: 01.10.2009

Aktiver Schreiber
Themenersteller

Beitrag hilfreich?

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






to Top to Top

Du bist nicht eingeloggt. Bitte beachte, dass Du eingeloggt sein musst, um Themen zu erstellen oder auf Beiträge zu antworten.

RSS Feed abonnieren

Werde in Echtzeit über neue Foren-Beiträge informiert:

RSS Feed abonnieren


0 Mitglieder waren innerhalb der letzten 15 Minuten online (3 heute gesamt):
[keine]

Administratoren und Moderatoren:
[keine]

Seitenreport hat 46126 registrierte Mitglieder, 4296 Themen und 37483 Beiträge.
Der aktuelle Mitgliederzuwachs liegt bei durchschnittlich 7 bestätigten Neuregistrierungen pro Tag.
Pro Tag werden im Seitenreport Forum durchschnittlich 0 neue Themen und 3 Beiträge erstellt.
Die Durchschnittszahlen berechnen sich aus den letzten 7 Tagen.

Mehrfach empfohlen

Seitenreport ist einer der bekanntesten SEO und Website Analyse Dienste im deutschsprachigen Raum und wurde u.a. schon empfohlen:
von Mr. Wong im Wong Letter
vom Leserservice der Deutschen Post
vom Technik Blog SiN
und vielen anderen

Seitenreport API

Verfolge die SERP Positionen Deiner Keywords und erhalte Informationen über verwendete Mikroformate, frage die Ergebnisse unserer Analysen live ab oder greife auf unsere History-Datenbank zu. Dies alles bietet Dir die neue Seitenreport API. Kontaktiere uns, um weitere Infos zu erhalten.