Daten per gzip komprimieren und dekomprimieren (Thema: PHP Beispiele)

Wie die gzip-Funktionen genutzt werden können, um vorhandene Daten zu komprimieren und diesen Vorgang wieder umzukehren

URL: http://www.rither.de/a/informatik/php-beispiele/cache-und-gzip/daten-per-gzip-komprimieren-und-dekomprimieren/
Zum Komprimieren von Daten kann gzcompress($data, $level) verwendet werden, wobei $level die "Stärke" der Komprimierung ist und zwischen 0 und 9 liegt.
Häufig wird ein Wert zwischen 3 und 6 verwendet.
Höhere Werte bringen wenig, kosten aber viel Performance.
Niedrigere erzeugen auch nur wenig Kompression.
PHP-Code
<?php
	$string = 'String String String String String String String String String String String String';
	$compressed = gzcompress($string, 9);
	echo("Zeichenlänge des nicht komprimierten Strings: ".strlen($string)."\n");
	echo("Zeichenlänge des komprimierten Strings: ".strlen($compressed));
?>
Ausgabe
Zeichenlänge des nicht komprimierten Strings: 83
Zeichenlänge des komprimierten Strings: 18

Vor dem Komprimieren kann es empfehlenswert sein, die Daten mit serialize() in einen String umzuwandeln, sofern sie noch nicht in einem solchen vorhanden sind.
PHP-Code
<?php
	$arr = array('foo'=>'bar', 'foo foo'=>'bar', 'fubar'=>'bart');
	$serialized = serialize($arr);
	$compressed = gzcompress($serialized, 9);
	echo("Zeichenlänge serialisiert: ".strlen($serialized)."\n");
	echo("Zeichenlänge serialisiert und komprimiert: ".strlen($compressed));
?>
Ausgabe
Zeichenlänge serialisiert: 73
Zeichenlänge serialisiert und komprimiert: 46

Um komprimierte Daten wieder zu dekomprimieren wird gzuncompress($data) verwendet.
Die Angabe der Komprimierungsstärke ist nicht notwendig, diese Information wird automatisch dem komprimierten String entnommen.
PHP-Code
<?php
	$arr = array('eins', 'zwei', 'drei', 'vier');

	$serialized = serialize($arr);
	$compressed = gzcompress($serialized, 9);

	$uncompressed = gzuncompress($compressed);
	$arr2 = unserialize($uncompressed);

	echo("Zeichenlänge serialisiert: ".strlen($serialized)."\n");
	echo("Zeichenlänge serialisiert und komprimiert: ".strlen($compressed)."\n");
	echo("Zeichenlänge serialisiert und dekomprimiert: ".strlen($uncompressed)."\n");

	var_dump($arr2);
?>
Ausgabe
Zeichenlänge serialisiert: 66
Zeichenlänge serialisiert und komprimiert: 53
Zeichenlänge serialisiert und dekomprimiert: 66
array(4) {
  [0]=>
  string(4) "eins"
  [1]=>
  string(4) "zwei"
  [2]=>
  string(4) "drei"
  [3]=>
  string(4) "vier"
}
Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung. OK