![]() |
[PHP] HTML-Code komprimieren
Hallo zusammen :hi:
Ich würde gerne mal testen, ob der Seitenaufbau meiner Webseite schneller ist, wenn ich den auszugebenden HTML-Code davor mit gzip komprimiere. Das habe ich so versucht:
Code:
Mit dem Aufruf von ob_start ohne Parameter geht alles problemlos, doch wenn ich diesen mit angebe, sehe ich nur eine leere Seite. Der Browser und der Apache müssten gzip jedoch unterstützen:
ereg('gzip', $encode = getenv("HTTP_ACCEPT_ENCODING")) ?
ob_start('ob_gzhandler') : ob_start();
Code:
Was mache ich falsch?
[b][i]Apache Environment[/i][/b]
HTTP_ACCEPT_ENCODING gzip,deflate [b][i]HTTP Headers Information[/i][/b] Accept-Encoding gzip,deflate [b][i]PHP Variables[/i][/b] _SERVER["HTTP_ACCEPT_ENCODING"] gzip,deflate Grüße |
Re: [PHP] HTML-Code komprimieren
Moin,
die drei Variablen sagen nur, dass der Client gzip-Compression unterstuetzt. Ueber den Apachen sagt das nichts aus. Desweiteren musst du das gar nicht pruefen; ob_gziphandler() ueberprueft selbststaendig, welche Encodings der Client akzeptiert und waehlt das Beste (gzip, deflate, oder Standard) aus. Bei mir siehts so aus:
Code:
BTW, wenn du einen Callback-Handler verwendest, solltest du nicht ob_get_contents oder eine aehnliche Funktion verwenden. Das kann manchmal Aerger geben ;)
if (extension_loaded('zlib'))
{ ob_start('ob_gzhandler'); } Greetz alcaeus |
Re: [PHP] HTML-Code komprimieren
Hi Andy, danke.
Zitat:
Zitat:
Code:
Zlib ist bei mir so eingestellt:
ob_start(...);
// PHP-Kram $contents = ob_get_contents(); ob_end_clean(); $contents = preg_replace(...); echo ...;
Code:
Grüße
[b][i]Registered PHP Streams[/i][/b] php, file, http, ftp, compress.zlib, https, ftps
[b][i]ZLib Support[/i][/b] enabled [b][i]Compiled Version[/i][/b] 1.2.3 [b][i]Linked Version[/i] [/b] 1.2.3 [b][i]Directive Local Value Master Value[/i][/b] zlib.output_compression Off Off zlib.output_compression_level -1 -1 zlib.output_handler no value no value |
Re: [PHP] HTML-Code komprimieren
Moin,
fuer die Output-Compression reicht es,
Code:
aufzurufen.
ob_start('ob_gzhandler')
Bei Terminierung des Scripts wird automatisch ob_gzhandler() ausgefuehrt, und den Code komprimiert. Falls du den Code vorher noch manipulieren willst, musst du einen zweiten Output-Buffer starten:
Code:
Greetz
ob_start('ob_gzhandler');
ob_start(); // Kram $contents = ob_get_clean(); // Mehr Kram echo $contents; alcaeus |
Re: [PHP] HTML-Code komprimieren
Hi,
ok, dann habe ich eine Ausgabe.:) Ich gebe als Parameter gzhandler mit und nicht gziphandler, da ich nur ersteres gefunden habe, aber auch das andere führt zum gleichen Ergebnis: Ich sehe nun die Seite ganz normal. Um zu sehen, ob das ganze allerdings etwas bringt, möchte ich die unkomprimierte und die komprimierte Größe im Vergleich ausgeben. Dazu habe ich folgendes auf php.net gefunden:
Code:
Nur geht das bei mir nicht. Wie kann ich denn ermitteln, ob gzip wirklich funktioniert und auch etwas bringt? ich habe auch mit strlen herumgespielt, doch irgendwas mache ich falsch.
There is a work-around for the situation you need to get length of the gz-ed buffer.
ob_start(); ob_start('ob_gzhandler'); ... output the page content... ob_end_flush(); // The ob_gzhandler one header('Content-Length: '.ob_get_length()); ob_end_flush(); // The main one |
Re: [PHP] HTML-Code komprimieren
Moin,
direkt im Skript geht das nicht, wenn ob_gzhandler aktiv ist. Du kannst allerhoechstens im verschachtelten Buffer den Content holen, die Groesse messen, dann mit den GZIP-Funktionen komprimieren, und nochmal die Groesse messen. Also so:
Code:
Ich hatte mich oben uebrigens verschrieben; es heisst tatsaechlich ob_gzhandler :oops: Es wird aber trotzdem funktionieren, weil der Content einfach unkomprimiert ausgegeben wird, falls die Callback-Funktion nicht gefunden wird.
ob_start('ob_gzhandler');
ob_start(); // Kram $contents = ob_get_contents(); $uncompressed_size = strlen($contents); $gzip_crc = crc32($contents); $contents = gzcompress($contents, 9); $contents = substr($contents, 0, strlen($contents) - 4); $gzip_contents = "\x1f\x8b\x08\x00\x00\x00\x00\x00{$gzip_contents}". pack('V', $gzip_crc) . pack('V', $uncompressed_size); $compressed_size = strlen($gzip_contents); Greetz alcaeus |
Re: [PHP] HTML-Code komprimieren
Hi,
wenn ich statt
Code:
das hier schreibe (denn nur so würde ich den Code verstehen *g*):
$gzip_contents = ...;
$compressed_size = strlen($gzip_contents);
Code:
könnte es hinkommen. Dankesehr! :)
$compressed_size = strlen($contents);
Edit: Wofür benötige ich dann eigentlich noch ob_start('ob_gzhandler')? Reicht es nicht, einfach den mittels gzcompress komprimierten String auszugeben? |
Re: [PHP] HTML-Code komprimieren
Ja, das wuerde theoretisch reichen. Aber wer will schon die Kompression von Hand machen (ausser du willst unbedingt wissen wie stark das Kompressionsverhaeltnis war), wenns auch automatisch geht? ;)
Greetz alcaeus |
Re: [PHP] HTML-Code komprimieren
Hi,
also, ob ich nun ob_start('ob_gzhandler'); schreibe oder ... = gzcompress($contents, 9);, ist auch nicht umständlicher, wobei ich bei letzterem die Kompression frei wählen kann. Also persönlich würde ich daher letzteres bevorzugen, aber das bleibt ja jedem selbst überlassen. ^^ |
Re: [PHP] HTML-Code komprimieren
Dann hast du aber imho wieder dieses Problem:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz