<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/filters.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'filters.compression.php',
    1 => 'Komprimierungsfilter',
    2 => 'Komprimierungsfilter',
  ),
  'up' => 
  array (
    0 => 'filters.php',
    1 => 'Liste verf&uuml;garer Filter',
  ),
  'prev' => 
  array (
    0 => 'filters.convert.php',
    1 => 'Umwandlungsfilter',
  ),
  'next' => 
  array (
    0 => 'filters.encryption.php',
    1 => 'Verschl&uuml;sselungsfilter',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'appendices/filters.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="filters.compression" class="section">
  <h2 class="title">Komprimierungsfilter</h2>

  <p class="simpara">
   Während die
   <a href="wrappers.compression.php" class="link">Komprimierungs-Wrapper</a> die
   Möglichkeit bieten, auf dem lokalen Dateisystem gzip- und bz2-kompatible
   Dateien zu erstellen, können sie weder mit komprimierten
   Netzwerkprotokollen umgehen, noch bieten sie eine Möglichkeit, einen
   unkomprimierten Stream zu erstellen und ihn dann zu komprimieren. Im
   Gegensatz dazu können Komprimierungsfilter jederzeit auf alle
   Stream-Ressourcen angewendet werden.
  </p>

  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <span class="simpara">
    Komprimierungsfilter erzeugen <em>keine</em> Kopfzeilen und
    Anhänge (Trailer), wie sie von Kommandozeilenprogrammen wie
    <code class="literal">gzip</code> verwendet werden. Sie komprimieren und
    dekomprimieren nur die eigentlichen Nutzdaten innerhalb des Streams.
   </span>
  </p></blockquote>

  <div class="section" id="filters.compression.zlib">
   <h2 class="title">zlib.deflate und zlib.inflate</h2>
   <p class="simpara">
    <code class="literal">zlib.deflate</code> (Komprimierung) und
    <code class="literal">zlib.inflate</code> (Dekomprimierung) sind Implementierungen
    der in <a href="https://datatracker.ietf.org/doc/html/rfc1951" class="link external">&raquo;&nbsp;RFC 1951</a> beschriebenen
    Komprimierungsmethoden. Der <code class="literal">deflate</code>-Filter benötigt bis
    zu drei Parameter, die als assoziatives Array übergeben werden.

    <code class="parameter">level</code> gibt die Komprimierungsstufe an, die
    verwendet werden soll (1-9). Je höher die Zahl, desto kleiner wird im
    Allgemeinen die Größe der komprimierten Daten, aber umso länger wird auch
    die Verarbeitungszeit. Es gibt auch zwei spezielle Komprimierungsstufen: 0
    (keine Komprimierung) und -1 (die zlib-interne Voreinstellung - derzeit 6).

    <code class="parameter">window</code> ist der Logarithmus zur Basis 2 für die
    Größe des Loopback-Fensters (der Speicherpuffer). Höhere Werte (bis zu 15
    -- 32768 Bytes) ergeben eine bessere Komprimierung auf Kosten des
    Speichers, während niedrigere Werte (bis zu 9 -- 512 Bytes) eine
    schlechtere Komprimierung bei geringerem Speicherbedarf ergeben. Der
    derzeitige Standardwert für <code class="parameter">window</code> ist
    <code class="literal">15</code>.

    <code class="parameter">memory</code> gibt an, wieviel Arbeitsspeicher zugewiesen
    werden soll. Die gültigen Werte reichen von 1 (minimale Zuweisung) bis 9
    (maximale Zuweisung). Diese Speicherzuweisung wirkt sich nur auf die
    Geschwindigkeit aus und hat keinen Einfluss auf die Größe der
    komprimierten Daten.
   </p>

   <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
    <span class="simpara">
     Da die Komprimierungsstufe der am häufigsten verwendete Parameter ist,
     kann er auch als einfacher Integer-Wert statt als Array-Element angegeben
     werden.
    </span>
   </p></blockquote>

   <p class="simpara">
    Die zlib.*-Komprimierungsfilter sind verfügbar wenn die
    <a href="ref.zlib.php" class="link">zlib</a>-Unterstützung aktiviert ist.
   </p>

   <div class="example" id="example-1">
    <p><strong>Beispiel #1 <code class="literal">zlib.deflate</code> und <code class="literal">zlib.inflate</code></strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$params </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'level' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">6</span><span style="color: #007700">, </span><span style="color: #DD0000">'window' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">15</span><span style="color: #007700">, </span><span style="color: #DD0000">'memory' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">9</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$original_text </span><span style="color: #007700">= </span><span style="color: #DD0000">"This is a test.\nThis is only a test.\nThis is not an important string.\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Der Originaltext ist " </span><span style="color: #007700">. </span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$original_text</span><span style="color: #007700">) . </span><span style="color: #DD0000">" Zeichen lang.\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$fp </span><span style="color: #007700">= </span><span style="color: #0000BB">fopen</span><span style="color: #007700">(</span><span style="color: #DD0000">'test.deflated'</span><span style="color: #007700">, </span><span style="color: #DD0000">'w'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">stream_filter_append</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #DD0000">'zlib.deflate'</span><span style="color: #007700">, </span><span style="color: #0000BB">STREAM_FILTER_WRITE</span><span style="color: #007700">, </span><span style="color: #0000BB">$params</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">fwrite</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #0000BB">$original_text</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">fclose</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">);<br /><br />echo </span><span style="color: #DD0000">"Die komprimierte Datei hat " </span><span style="color: #007700">. </span><span style="color: #0000BB">filesize</span><span style="color: #007700">(</span><span style="color: #DD0000">'test.deflated'</span><span style="color: #007700">) . </span><span style="color: #DD0000">" Bytes.\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Der Originaltext war:\n"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">/* Verwendung von readfile und zlib.inflate, um auf der Stelle zu dekomprimieren */<br /></span><span style="color: #0000BB">readfile</span><span style="color: #007700">(</span><span style="color: #DD0000">'php://filter/zlib.inflate/resource=test.deflated'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">/* Erzeugt die Ausgabe:<br /><br />Der Originaltext ist 70 Zeichen lang.<br />Die komprimierte Datei hat 56 Bytes.<br />Der Originaltext war:<br />This is a test.<br />This is only a test.<br />This is not an important string.<br /><br /> */<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <div class="example" id="example-2">
    <p><strong>Beispiel #2 Vereinfachte Verwendung von <code class="literal">zlib.deflate</code></strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$original_text </span><span style="color: #007700">= </span><span style="color: #DD0000">"This is a test.\nThis is only a test.\nThis is not an important string.\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Der Originaltext ist " </span><span style="color: #007700">. </span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$original_text</span><span style="color: #007700">) . </span><span style="color: #DD0000">" Zeichen lang.\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$fp </span><span style="color: #007700">= </span><span style="color: #0000BB">fopen</span><span style="color: #007700">(</span><span style="color: #DD0000">'test.deflated'</span><span style="color: #007700">, </span><span style="color: #DD0000">'w'</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">/* Hier steht "6" für die Komprimierungsstufe 6 */<br /></span><span style="color: #0000BB">stream_filter_append</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #DD0000">'zlib.deflate'</span><span style="color: #007700">, </span><span style="color: #0000BB">STREAM_FILTER_WRITE</span><span style="color: #007700">, </span><span style="color: #0000BB">6</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">fwrite</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #0000BB">$original_text</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">fclose</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">);<br /><br />echo </span><span style="color: #DD0000">"Die komprimierte Datei hat " </span><span style="color: #007700">. </span><span style="color: #0000BB">filesize</span><span style="color: #007700">(</span><span style="color: #DD0000">'test.deflated'</span><span style="color: #007700">) . </span><span style="color: #DD0000">" Bytes.\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">/* Erzeugt die Ausgabe:<br /><br />Der Originaltext ist 70 Zeichen lang.<br />Die komprimierte Datei hat 56 Bytes.<br /><br /> */<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </div>

  <div class="section" id="filters.compression.bzip2">
   <h2 class="title">bzip2.compress und bzip2.decompress</h2>
   <p class="simpara">
    <code class="literal">bzip2.compress</code> und <code class="literal">bzip2.decompress</code>
    funktionieren auf die gleiche Weise wie die oben beschriebenen
    zlib-Filter.

    Der Filter <code class="literal">bzip2.compress</code> akzeptiert bis zu zwei
    Parameter, die als Elemente eines assoziativen Arrays angegeben werden:

    <code class="parameter">blocks</code> ist ein ganzzahliger Wert von 1 bis 9, der
    die Anzahl der 100kB-Speicherblöcke angibt, die dem Arbeitsbereich
    zugewiesen werden sollen.

    <code class="parameter">work</code> ist ebenfalls ein ganzzahliger Wert. Er reicht
    von 0 bis 250 und gibt an, wie viel Aufwand mit der normalen
    Komprimierungsmethode betrieben werden soll, bevor auf eine langsamere,
    aber zuverlässigere Methode zurückgegriffen wird. Wenn dieser Wert
    geändert wird, wirkt sich das nur auf die Geschwindigkeit der
    Komprimierung aus. Weder die Größe der komprimierten Ausgabe noch der
    Speicherverbrauch werden durch diese Einstellung verändert. Ein Wert von 0
    bedeutet, dass die Bibliothek ihre Standardkonfiguration verwenden soll.

    Der Filter <code class="literal">bzip2.decompress</code> akzeptiert nur einen
    Parameter, der entweder als gewöhnlicher boolescher Wert oder als Element
    <code class="parameter">small</code> eines assoziativen Arrays übergeben werden
    kann.

    Wenn <code class="parameter">small</code> auf <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> gesetzt ist, wird die
    bzip-Bibliothek angewiesen, die Dekomprimierung auf Kosten der
    Geschwindigkeit mit minimalem Speicherplatzbedarf durchzuführen.
   </p>

   <p class="simpara">
    Die bzip2.*-Komprimierungsfilter sind verfügbar wenn die
    <a href="ref.bzip2.php" class="link">bz2</a>-Unterstützung aktiviert ist.
   </p>

   <div class="example" id="example-3">
    <p><strong>Beispiel #3 <code class="literal">bzip2.compress</code> und <code class="literal">bzip2.decompress</code></strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$param </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'blocks' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">9</span><span style="color: #007700">, </span><span style="color: #DD0000">'work' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">0</span><span style="color: #007700">);<br /><br />echo </span><span style="color: #DD0000">"Die Originaldatei hat " </span><span style="color: #007700">. </span><span style="color: #0000BB">filesize</span><span style="color: #007700">(</span><span style="color: #DD0000">'LICENSE'</span><span style="color: #007700">) . </span><span style="color: #DD0000">" Bytes."</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$fp </span><span style="color: #007700">= </span><span style="color: #0000BB">fopen</span><span style="color: #007700">(</span><span style="color: #DD0000">'LICENSE.compressed'</span><span style="color: #007700">, </span><span style="color: #DD0000">'w'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">stream_filter_append</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #DD0000">'bzip2.compress'</span><span style="color: #007700">, </span><span style="color: #0000BB">STREAM_FILTER_WRITE</span><span style="color: #007700">, </span><span style="color: #0000BB">$param</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">fwrite</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'LICENSE'</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">fclose</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">);<br /><br />echo </span><span style="color: #DD0000">"Die komprimierte Datei hat " </span><span style="color: #007700">. </span><span style="color: #0000BB">filesize</span><span style="color: #007700">(</span><span style="color: #DD0000">'LICENSE.compressed'</span><span style="color: #007700">) . </span><span style="color: #DD0000">" Bytes.\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">/* Erzeugt die Ausgabe:<br /><br />Die Originaldatei hat 3288 Bytes.<br />Die komprimierte Datei hat 1488 Bytes.<br /><br /> */<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </div>
  </div><?php manual_footer($setup); ?>