Daten per gzip komprimieren und dekomprimieren

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

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"

}