<?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 => 'fr',
  ),
  'this' => 
  array (
    0 => 'filters.compression.php',
    1 => 'Filtres de compression',
    2 => 'Filtres de compression',
  ),
  'up' => 
  array (
    0 => 'filters.php',
    1 => 'Liste des filtres disponibles',
  ),
  'prev' => 
  array (
    0 => 'filters.convert.php',
    1 => 'Filtres de conversion',
  ),
  'next' => 
  array (
    0 => 'filters.encryption.php',
    1 => 'Filtres de chiffrement',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    '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">Filtres de compression</h2>

  <p class="simpara">
   Alors que les <a href="wrappers.compression.php" class="link">enveloppes de
   compression</a>  fournissent un moyen pour générer des fichiers aux
   formats gzip et bz2, ils ne permettent pas de gérer les protocoles réseaux
   compressés, ni de commencer avec un flux non compressé pour le transformer
   en flux compressé. Pour cela, un filtre de compression peut être appliqué
   à tout moment sur n&#039;importe quelle ressource de flux.
  </p>

  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <span class="simpara">
    Les filtres de compression <em>ne génèrent pas</em> les en-têtes
    et fins de fichiers, comme le fait l&#039;utilitaire <code class="literal">gzip</code>.
    Ils ne font que compresser et décompresser des portions de flux de données.
   </span>
  </p></blockquote>

  <div class="section" id="filters.compression.zlib">
   <h2 class="title">zlib.deflate et zlib.inflate</h2>
   <p class="simpara">
    <code class="literal">zlib.deflate</code> (compression) et
    <code class="literal">zlib.inflate</code> (décompression) sont les implémentations
    des méthodes de compression présentées dans la
    <a href="https://datatracker.ietf.org/doc/html/rfc1951" class="link external">&raquo;&nbsp;RFC 1951</a>.
    Le filtre <code class="literal">deflate</code> prend jusqu&#039;à trois paramètres, passés
    sous la forme de <a href="language.types.array.php" class="link">tableau</a> associatif.

    <code class="parameter">level</code> spécifie le niveau de compression souhaité,
    de 1 à 9. Plus le niveau est haut, meilleure est la compression, et plus
    cher est le coût de compression. Deux niveaux de compression spéciaux
    existent : 0, qui représente l&#039;absence de compression, et -1, qui
    représente le niveau par défaut de zlib : actuellement, 6.

    <code class="parameter">window</code> est la taille du tampon mémoire, en base 2.
    Les valeurs supérieures, jusqu&#039;à 15, soit 32768 octets, donnent de meilleures
    compressions, et les valeurs inférieures, jusqu&#039;à 9, soit 512 octets,
    occupent le moins d&#039;espace en mémoire. Par défaut,
    <code class="parameter">window</code> vaut actuellement <code class="literal">15</code>.

    <code class="parameter">memory</code> est une indication du niveau de mémoire
    nécessaire.
    Les valeurs valides vont de 1, pour l&#039;allocation minimale, à 9, pour une
    allocation maximale. L&#039;allocation de mémoire affecte la vitesse d&#039;exécution,
    et n&#039;a pas d&#039;impact sur la taille de la charge utile générée.
   </p>

   <blockquote class="note"><p><strong class="note">Note</strong>: 
    <span class="simpara">
     Comme le niveau de compression est le paramètre le plus courant, il peut
     aussi être fourni en tant que valeur <a href="language.types.integer.php" class="link">entier</a>, au lieu d&#039;un <a href="language.types.array.php" class="link">tableau</a>.
    </span>
   </p></blockquote>

   <p class="simpara">
    Les filtres de compression zlib.* sont disponibles si le support de
    <a href="ref.zlib.php" class="link">zlib</a> est activé.
   </p>

   <div class="example" id="example-1">
    <p><strong>Exemple #1 
     <code class="literal">zlib.deflate</code> et
     <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">"Le texte original est long de " </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">" octets.\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">"Le fichier compressé fait " </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">" octets de long.\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Le texte original était :\n"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">/* Utilise readfile et zlib.inflate pour décompresser à la volée */<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">/* Affiche :<br /><br />Le texte original est long de 70 octets<br />Le fichier compressé fait 56 octets de long.<br />Le texte original était :<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>Exemple #2 
     <code class="literal">zlib.deflate</code> simple
    </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">"Le texte original est long de " </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">" octets.\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">/* Ici, "6" indique le niveau de compression de 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">"Le fichier compressé fait " </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">" octets de long.\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">/* Affiche :<br /><br />Le texte original est long de 70 octets<br />Le fichier compressé fait 56 octets de long.<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 et bzip2.decompress</h2>
   <p class="simpara">
    <code class="literal">bzip2.compress</code> et
    <code class="literal">bzip2.decompress</code>
    fonctionnent de la même manière que les filtres zlib décrits ci-dessus.
    Le filtre <code class="literal">bzip2.compress</code> accepte jusqu&#039;à 2 paramètres,
    sous la forme d&#039;un <a href="language.types.array.php" class="link">tableau</a> associatif :

    <code class="parameter">blocks</code> est une valeur <a href="language.types.integer.php" class="link">entier</a>, de 1 à 9,
    spécifiant le nombre de blocs de 100 kb de mémoire à allouer à l&#039;espace de
    travail.

    <code class="parameter">work</code> est aussi un <a href="language.types.integer.php" class="link">entier</a> dont la valeur va de
    0 à 250, et qui indique le niveau d&#039;effort fourni avec une méthode de
    compression avant de passer à une autre méthode, plus lente. Modifier ce
    paramètre n&#039;a qu&#039;un effet sur la vitesse de compression. Le gain d&#039;espace
    ou la mémoire utilisée restent les mêmes. Un niveau de 0 indique que la
    bibliothèque doit utiliser sa configuration par défaut.

    Le filtre <code class="literal">bzip2.decompress</code> accepte uniquement un paramètre,
    qui peut être passé sous la forme d&#039;un <a href="language.types.boolean.php" class="link">booléen</a>, ou en tant que l&#039;élément
    <code class="parameter">small</code> d&#039;un <a href="language.types.array.php" class="link">tableau</a> associatif.

    <code class="parameter">small</code>, lorsque défini à <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, indique à la
    bibliothèque bzip qu&#039;elle doit faire une décompression en utilisant le
    moins de mémoire possible, aux dépens de la vitesse.
   </p>

   <p class="simpara">
    Les filtres bzip2.* sont disponibles si le support de
    <a href="ref.bzip2.php" class="link">bz2</a> est activé.
   </p>

   <div class="example" id="example-3">
    <p><strong>Exemple #3 
     <code class="literal">bzip2.compress</code> et
     <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">"Le fichier original fait " </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">" octets de long.\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">'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">"Le fichier compressé fait " </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">" octets de long.\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">/* Affiche :<br /><br />Le fichier original fait 3288 octets de long.<br />Le fichier compressé fait 1488 octets de long.<br /><br /> */<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

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