<?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 => 'es',
  ),
  'this' => 
  array (
    0 => 'filters.compression.php',
    1 => 'Filtros de compresi&oacute;n',
    2 => 'Filtros de compresi&oacute;n',
  ),
  'up' => 
  array (
    0 => 'filters.php',
    1 => 'Lista de filtros est&aacute;ndar',
  ),
  'prev' => 
  array (
    0 => 'filters.convert.php',
    1 => 'Filtros de conversi&oacute;n',
  ),
  'next' => 
  array (
    0 => 'filters.encryption.php',
    1 => 'Filtros de cifrado',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    '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">Filtros de compresión</h2>

  <p class="simpara">
   Aunque las <a href="wrappers.compression.php" class="link">envolturas de
   compresión</a>  proporcionan un medio para generar ficheros en los
   formatos gzip y bz2, no permiten manejar los protocolos de red
   comprimidos, ni comenzar con un flujo no comprimido para transformarlo
   en flujo comprimido. Para ello, un filtro de compresión puede ser aplicado
   en cualquier momento a cualquier recurso de flujo.
  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Los filtros de compresión <em>no generan</em> los encabezados
    y finales de ficheros, como lo hace la utilidad <code class="literal">gzip</code>.
    Solo comprimen y descomprimen porciones de flujo de datos.
   </span>
  </p></blockquote>

  <div class="section" id="filters.compression.zlib">
   <h2 class="title">zlib.deflate y zlib.inflate</h2>
   <p class="simpara">
    <code class="literal">zlib.deflate</code> (compresión) y
    <code class="literal">zlib.inflate</code> (descompresión) son las implementaciones
    de los métodos de compresión presentados en la
    <a href="https://datatracker.ietf.org/doc/html/rfc1951" class="link external">&raquo;&nbsp;RFC 1951</a>.
    El filtro <code class="literal">deflate</code> toma hasta tres parámetros, pasados
    en forma de <span class="type"><a href="language.types.array.php" class="type array">array</a></span> asociativo.

    <code class="parameter">level</code> especifica el nivel de compresión deseado,
    de 1 a 9. Cuanto más alto sea el nivel, mejor será la compresión, y más
    costoso será el coste de compresión. Existen dos niveles de compresión especiales:
    0, que representa la ausencia de compresión, y -1, que representa el nivel por defecto de zlib:
    actualmente, 6.

    <code class="parameter">window</code> es el tamaño del buffer de memoria, en base 2.
    Los valores superiores, hasta 15, es decir, 32768 bytes, dan mejores
    compresiones, y los valores inferiores, hasta 9, es decir, 512 bytes,
    ocupan menos espacio en memoria. Por defecto,
    <code class="parameter">window</code> vale actualmente <code class="literal">15</code>.

    <code class="parameter">memory</code> es una indicación del nivel de memoria
    necesario.
    Los valores válidos van de 1, para la asignación mínima, a 9, para una
    asignación máxima. La asignación de memoria afecta la velocidad de ejecución,
    y no el coste global.
   </p>

   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <span class="simpara">
     Como el nivel de compresión es el parámetro más común, también puede ser proporcionado
     como valor <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>, en lugar de un <span class="type"><a href="language.types.array.php" class="type array">array</a></span>.
    </span>
   </p></blockquote>

   <p class="simpara">
    Los filtros de compresión zlib.* están disponibles si el soporte de
    <a href="ref.zlib.php" class="link">zlib</a> está activado.
   </p>

   <div class="example" id="example-1">
    <p><strong>Ejemplo #1 
     <code class="literal">zlib.deflate</code> y
     <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">"El texto original es largo 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">" bytes.\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">"El fichero comprimido hace " </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 de largo.\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"El texto original era :\n"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">/* Utiliza readfile y zlib.inflate para descomprimir al vuelo */<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">/* Muestra :<br /><br />El texto original es largo de 70 bytes<br />El fichero comprimido hace 56 bytes de largo.<br />El texto original era :<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>Ejemplo #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">"El texto original es largo 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">" bytes.\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">/* Aquí, "6" indica el nivel de compresión 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">"El fichero comprimido hace " </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 de largo.\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">/* Muestra :<br /><br />El texto original es largo de 70 bytes<br />El fichero comprimido hace 56 bytes de largo.<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 y bzip2.decompress</h2>
   <p class="simpara">
    <code class="literal">bzip2.compress</code> y
    <code class="literal">bzip2.decompress</code>
    funcionan de la misma manera que los filtros zlib descritos anteriormente.
    El filtro <code class="literal">bzip2.compress</code> acepta hasta 2 parámetros,
    en forma de <span class="type"><a href="language.types.array.php" class="type array">array</a></span> asociativo:

    <code class="parameter">blocks</code> es un valor <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>, de 1 a 9,
    especificando el número de bloques de 100 kb de memoria a asignar al espacio de
    trabajo.

    <code class="parameter">work</code> es también un <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> cuyo valor va de
    0 a 250, e indica el nivel de esfuerzo proporcionado con un método de
    compresión antes de pasar a otro método, más lento. Modificar este
    parámetro solo tiene efecto en la velocidad de compresión. La ganancia de espacio
    o la memoria utilizada permanecen iguales. Un nivel de 0 indica que la
    biblioteca debe utilizar su configuración por defecto.

    El filtro <code class="literal">bzip2.decompress</code> acepta únicamente un parámetro,
    que puede ser pasado en forma de <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>, o como el elemento
    <code class="parameter">small</code> de un <span class="type"><a href="language.types.array.php" class="type array">array</a></span> asociativo.

    <code class="parameter">small</code>, cuando se define a <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, indica a la
    biblioteca bzip que debe realizar una descompresión utilizando la menor cantidad de memoria posible, a expensas de la velocidad.
   </p>

   <p class="simpara">
    Los filtros bzip2.* están disponibles si el soporte de
    <a href="ref.bzip2.php" class="link">bz2</a> está activado.
   </p>

   <div class="example" id="example-3">
    <p><strong>Ejemplo #3 
     <code class="literal">bzip2.compress</code> y
     <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">"El fichero original hace " </span><span style="color: #007700">. </span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">LICENSE</span><span style="color: #007700">) . </span><span style="color: #DD0000">" bytes de largo.\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">"El fichero comprimido hace " </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 de largo.\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">/* Muestra :<br /><br />El fichero original hace 3288 bytes de largo.<br />El fichero comprimido hace 1488 bytes de largo.<br /><br /> */<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

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