AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[PHP] HTML-Code komprimieren

Ein Thema von Matze · begonnen am 24. Jun 2007 · letzter Beitrag vom 1. Jul 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

[PHP] HTML-Code komprimieren

  Alt 24. Jun 2007, 09:37
Hallo zusammen

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:
ereg('gzip', $encode = getenv("HTTP_ACCEPT_ENCODING")) ?
    ob_start('ob_gzhandler') : ob_start();
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:

Code:
[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
Was mache ich falsch?

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: [PHP] HTML-Code komprimieren

  Alt 24. Jun 2007, 10:24
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:
if (extension_loaded('zlib'))
{
   ob_start('ob_gzhandler');
}
BTW, wenn du einen Callback-Handler verwendest, solltest du nicht ob_get_contents oder eine aehnliche Funktion verwenden. Das kann manchmal Aerger geben

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: [PHP] HTML-Code komprimieren

  Alt 24. Jun 2007, 10:33
Hi Andy, danke.

Zitat von alcaeus:
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.
Achso, das wusste ich nicht. Dann hoffe ich mal, dass man sich darauf verlassen kann.

Zitat von alcaeus:
BTW, wenn du einen Callback-Handler verwendest, solltest du nicht ob_get_contents oder eine aehnliche Funktion verwenden. Das kann manchmal Aerger geben
Ich weiß zwar nicht, was ein Callback-Handler ist, aber ich mache das so:

Code:
ob_start(...);

// PHP-Kram

$contents = ob_get_contents();
ob_end_clean();

$contents = preg_replace(...);
echo ...;
Zlib ist bei mir so eingestellt:

Code:
[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
Grüße
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#4

Re: [PHP] HTML-Code komprimieren

  Alt 24. Jun 2007, 10:49
Moin,

fuer die Output-Compression reicht es,
Code:
ob_start('ob_gzhandler')
aufzurufen.
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:
ob_start('ob_gzhandler');
ob_start();

// Kram

$contents = ob_get_clean();

// Mehr Kram

echo $contents;
Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: [PHP] HTML-Code komprimieren

  Alt 24. Jun 2007, 11:20
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:
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
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.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#6

Re: [PHP] HTML-Code komprimieren

  Alt 24. Jun 2007, 11:46
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:
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);
Ich hatte mich oben uebrigens verschrieben; es heisst tatsaechlich ob_gzhandler Es wird aber trotzdem funktionieren, weil der Content einfach unkomprimiert ausgegeben wird, falls die Callback-Funktion nicht gefunden wird.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: [PHP] HTML-Code komprimieren

  Alt 24. Jun 2007, 12:26
Hi,

wenn ich statt

Code:
$gzip_contents = ...;
$compressed_size = strlen($gzip_contents);
das hier schreibe (denn nur so würde ich den Code verstehen *g*):

Code:
$compressed_size = strlen($contents);
könnte es hinkommen. Dankesehr!


Edit: Wofür benötige ich dann eigentlich noch ob_start('ob_gzhandler')?

Reicht es nicht, einfach den mittels gzcompress komprimierten String auszugeben?
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#8

Re: [PHP] HTML-Code komprimieren

  Alt 24. Jun 2007, 13:43
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: [PHP] HTML-Code komprimieren

  Alt 24. Jun 2007, 13:52
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. ^^
  Mit Zitat antworten Zitat
Benutzerbild von S2B
S2B

Registriert seit: 1. Feb 2004
Ort: Aachen
1.268 Beiträge
 
#10

Re: [PHP] HTML-Code komprimieren

  Alt 24. Jun 2007, 14:19
Dann hast du aber imho wieder dieses Problem:
Zitat von alcaeus:
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.
Simon Praetorius
Gruß
S2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz