Skip to content

Commit 3f389a1

Browse files
authored
[Sync-En] filters: document the role of the zlib window parameter (#1316)
1 parent 00893dd commit 3f389a1

1 file changed

Lines changed: 168 additions & 51 deletions

File tree

‎appendices/filters.xml‎

Lines changed: 168 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<!-- EN-Revision: 3f1dbc451b313fb1ec8058f24c1beccf55fce316 Maintainer: PhilDaiguille Status: ready -->
2+
<!-- EN-Revision: 82b5e0afeb38142e91fbba05f06b46c3129420ba Maintainer: PhilDaiguille Status: ready -->
33
<!-- Reviewed: no Maintainer: Marqitos -->
44
<appendix xml:id="filters" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
55
<title>Lista de filtros estándar</title>
@@ -54,8 +54,8 @@
5454
<?php
5555
$fp = fopen('php://output', 'w');
5656
stream_filter_append($fp, 'string.rot13');
57-
fwrite($fp, "Ceci est un test.\n");
58-
/* muestra : Prpv rfg ha grfg. */
57+
fwrite($fp, "Esto es una prueba.\n");
58+
/* Muestra: Rfgb rf han cehron. */
5959
?>
6060
]]>
6161
</programlisting>
@@ -75,8 +75,8 @@ fwrite($fp, "Ceci est un test.\n");
7575
<?php
7676
$fp = fopen('php://output', 'w');
7777
stream_filter_append($fp, 'string.toupper');
78-
fwrite($fp, "Ceci est un test.\n");
79-
/* muestra : CECI EST UN TEST. */
78+
fwrite($fp, "Esto es una prueba.\n");
79+
/* Muestra: ESTO ES UNA PRUEBA. */
8080
?>
8181
]]>
8282
</programlisting>
@@ -96,8 +96,8 @@ fwrite($fp, "Ceci est un test.\n");
9696
<?php
9797
$fp = fopen('php://output', 'w');
9898
stream_filter_append($fp, 'string.tolower');
99-
fwrite($fp, "Ceci est un test.\n");
100-
/* muestra : ceci est un test. */
99+
fwrite($fp, "Esto es una prueba.\n");
100+
/* Muestra: esto es una prueba. */
101101
?>
102102
]]>
103103
</programlisting>
@@ -121,16 +121,16 @@ fwrite($fp, "Ceci est un test.\n");
121121
<![CDATA[
122122
<?php
123123
$fp = fopen('php://output', 'w');
124-
stream_filter_append($fp, 'string.strip_tags', STREAM_FILTER_WRITE, "<strong><em><span>");
125-
fwrite($fp, "<strong>Ce texte en gras</strong> finit par être agrandi <h1>en un titre 1</h1>\n");
124+
stream_filter_append($fp, 'string.strip_tags', STREAM_FILTER_WRITE, "<b><i><u>");
125+
fwrite($fp, "<b>texto en negrita</b> ampliado a un <h1>encabezado de nivel 1</h1>\n");
126126
fclose($fp);
127-
/* muestra : Ce texte en gras finit par être agrandi en un titre 1 */
127+
/* Muestra: texto en negrita ampliado a un encabezado de nivel 1 */
128128
129129
$fp = fopen('php://output', 'w');
130-
stream_filter_append($fp, 'string.strip_tags', STREAM_FILTER_WRITE, array('strong','em','span'));
131-
fwrite($fp, "<strong>Ce texte en gras</strong> finit par être agrandi <h1>en un titre 1</h1>\n");
130+
stream_filter_append($fp, 'string.strip_tags', STREAM_FILTER_WRITE, array('b','i','u'));
131+
fwrite($fp, "<b>texto en negrita</b> ampliado a un <h1>encabezado de nivel 1</h1>\n");
132132
fclose($fp);
133-
/* muestra : Ce texte en gras finit par être agrandi en un titre 1 */
133+
/* Muestra: texto en negrita ampliado a un encabezado de nivel 1 */
134134
?>
135135
]]>
136136
</programlisting>
@@ -174,22 +174,22 @@ $fp = fopen('php://output', 'w');
174174
stream_filter_append($fp, 'convert.base64-encode');
175175
fwrite($fp, "This is a test.\n");
176176
fclose($fp);
177-
/* muestra : VGhpcyBpcyBhIHRlc3QuCg== */
177+
/* Muestra: VGhpcyBpcyBhIHRlc3QuCg== */
178178
179179
$param = array('line-length' => 8, 'line-break-chars' => "\r\n");
180180
$fp = fopen('php://output', 'w');
181181
stream_filter_append($fp, 'convert.base64-encode', STREAM_FILTER_WRITE, $param);
182182
fwrite($fp, "This is a test.\n");
183183
fclose($fp);
184-
/* muestra : VGhpcyBp
185-
: cyBhIHRl
186-
: c3QuCg== */
184+
/* Muestra: VGhpcyBp
185+
: cyBhIHRl
186+
: c3QuCg== */
187187
188188
$fp = fopen('php://output', 'w');
189189
stream_filter_append($fp, 'convert.base64-decode');
190190
fwrite($fp, "VGhpcyBpcyBhIHRlc3QuCg==");
191191
fclose($fp);
192-
/* muestra : This is a test. */
192+
/* Muestra: This is a test. */
193193
?>
194194
]]>
195195
</programlisting>
@@ -223,7 +223,7 @@ fclose($fp);
223223
$fp = fopen('php://output', 'w');
224224
stream_filter_append($fp, 'convert.quoted-printable-encode');
225225
fwrite($fp, "This is a test.\n");
226-
/* muestra : =This is a test.=0A */
226+
/* Muestra: =This is a test.=0A */
227227
?>
228228
]]>
229229
</programlisting>
@@ -282,7 +282,7 @@ fclose($fp);
282282

283283
<section xml:id="filters.compression.zlib">
284284
<title>zlib.deflate y zlib.inflate</title>
285-
<simpara>
285+
<para>
286286
<literal>zlib.deflate</literal> (compresión) y
287287
<literal>zlib.inflate</literal> (descompresión) son las implementaciones
288288
de los métodos de compresión presentados en la
@@ -296,18 +296,135 @@ fclose($fp);
296296
0, que representa la ausencia de compresión, y -1, que representa el nivel por defecto de zlib:
297297
actualmente, 6.
298298

299-
<parameter>window</parameter> es el tamaño del buffer de memoria, en base 2.
300-
Los valores superiores, hasta 15, es decir, 32768 bytes, dan mejores
301-
compresiones, y los valores inferiores, hasta 9, es decir, 512 bytes,
302-
ocupan menos espacio en memoria. Por defecto,
299+
<parameter>window</parameter> es el logaritmo en base 2 del tamaño de la
300+
ventana de compresión. Los valores superiores, hasta 15, es decir, 32768 bytes,
301+
dan una mejor compresión a costa de más memoria, y los valores inferiores,
302+
hasta 9, es decir, 512 bytes, dan una compresión menor ocupando menos
303+
espacio en memoria. Por defecto,
303304
<parameter>window</parameter> vale actualmente <literal>15</literal>.
304305

305-
<parameter>memory</parameter> es una indicación del nivel de memoria
306-
necesario.
306+
El filtro <literal>zlib.deflate</literal> implementa los métodos de
307+
compresión <literal>DEFLATE</literal>, <literal>ZLIB</literal> y
308+
<literal>GZIP</literal> según el valor del parámetro
309+
<parameter>window</parameter>.
310+
311+
Los 4 bits inferiores del parámetro window fijan el tamaño del
312+
«búfer de historial» interno utilizado, siendo el logaritmo en base 2 de su
313+
tamaño, en un rango de 8 a 15. El significado de los demás bits del
314+
parámetro window puede fijarse como se describe a continuación.
315+
316+
<itemizedlist>
317+
<listitem>
318+
<simpara>
319+
<literal>DEFLATE</literal> (<link xlink:href="&url.rfc;1951">RFC 1951</link>)
320+
es un algoritmo de compresión sin tratar, sin encabezado ni suma de
321+
verificación. Se aplica cuando el parámetro window se fija en el rango
322+
de -9 a -15. Este algoritmo de compresión es la base de todos los
323+
formatos generados por el filtro <literal>zlib.deflate</literal>.
324+
Las funciones correspondientes que operan directamente sobre strings son
325+
<function>gzdeflate</function> y <function>gzinflate</function>.
326+
</simpara>
327+
</listitem>
328+
329+
<listitem>
330+
<simpara>
331+
<literal>ZLIB</literal> (<link xlink:href="&url.rfc;1950">RFC 1950</link>)
332+
aplica el algoritmo <literal>DEFLATE</literal> y añade un encabezado de
333+
2 bytes y un tráiler de 4 bytes que contiene la suma de verificación
334+
Adler32 de los datos sin comprimir, en orden de bytes big-endian:
335+
<literal><![CDATA[ZLIB = ZLIBHEADER(2B) DEFLATE ADLER32(4B)]]></literal>
336+
337+
El encabezado de 2 bytes, leído como un número de 16 bits sin signo en
338+
orden big-endian, debe ser múltiplo de 31.
339+
Este formato se genera cuando el parámetro window se fija en el rango
340+
de 8 a 15.
341+
Las funciones correspondientes que operan directamente sobre strings son
342+
<function>gzcompress</function> y <function>gzuncompress</function>.
343+
</simpara>
344+
</listitem>
345+
346+
<listitem>
347+
<simpara>
348+
<literal>GZIP</literal> (<link xlink:href="&url.rfc;1952">RFC 1952</link>)
349+
aplica el algoritmo <literal>DEFLATE</literal> añadiendo un encabezado y
350+
un tráiler con la suma de verificación <literal>CRC32</literal> de los
351+
datos sin comprimir y su longitud, ambos en orden de bytes little-endian:
352+
<literal><![CDATA[GZIP = GZIPHEADER(10B) DEFLATE CRC32(4B) LENGTH(4B)]]></literal>
353+
354+
Es el formato de los ficheros <literal>.gz</literal>, en el que
355+
<literal>GZIPHEADER</literal> contiene, en este orden, la firma
356+
<literal>GZIP</literal> (<literal>\x1f\x8B</literal>), el método de
357+
compresión (<literal>\x08</literal>), un byte de flags a cero, una fecha
358+
de modificación a cero en 4 bytes, un byte de flags adicionales que
359+
depende del nivel de compresión, y el sistema operativo fijado al sistema
360+
actual (<literal>\x00</literal> = sistema de ficheros FAT,
361+
<literal>\x03</literal> = Unix, etc.).
362+
Este formato se genera cuando el parámetro window se fija en el rango
363+
de 9+16=25 a 15+16=31. Tenga en cuenta que existe un límite de 4GB para
364+
la longitud máxima de los datos sin comprimir; más allá de este límite,
365+
solo se almacena el módulo 2^32 de la longitud real en la parte
366+
<literal>LENGTH</literal>.
367+
Las funciones correspondientes que operan directamente sobre strings son
368+
<function>gzencode</function> y <function>gzdecode</function>; la
369+
función <function>gzopen</function> permite leer y escribir ficheros
370+
<literal>.gz</literal>.
371+
</simpara>
372+
</listitem>
373+
</itemizedlist>
374+
375+
Con el filtro <literal>zlib.inflate</literal>, solo se admite el parámetro
376+
<parameter>window</parameter>; cualquier otro parámetro
377+
(<parameter>memory</parameter>, <parameter>level</parameter>) se ignora.
378+
Sea $W el logaritmo en base 2 del tamaño del búfer de historial, de modo
379+
que el descompresor asigna 2^$W bytes. Para el formato ZLIB, este valor
380+
debe ser mayor o igual al registrado en el encabezado, lo cual se
381+
comprueba durante la descompresión; para los demás formatos, basta con
382+
que sea lo suficientemente grande para las distancias de coincidencia
383+
realmente presentes en los datos.
384+
El rango es 9 ≤ $W ≤ 15. Si se desconoce, $W=15 es la opción más segura.
385+
386+
<itemizedlist>
387+
<listitem>
388+
<simpara>
389+
<literal>DEFLATE</literal> (<link xlink:href="&url.rfc;1951">RFC 1951</link>):
390+
utilice window=-$W, siendo $W un valor no inferior al utilizado para
391+
la compresión. Si se desconoce, fije window=-15.
392+
</simpara>
393+
</listitem>
394+
395+
<listitem>
396+
<simpara>
397+
<literal>ZLIB</literal> (<link xlink:href="&url.rfc;1950">RFC 1950</link>):
398+
utilice window=$W. El valor de $W puede obtenerse del propio encabezado
399+
ZLIB; en caso contrario, fije window=15.
400+
</simpara>
401+
</listitem>
402+
403+
<listitem>
404+
<simpara>
405+
<literal>GZIP</literal> (<link xlink:href="&url.rfc;1952">RFC 1952</link>):
406+
utilice window=$W+16. Un encabezado GZIP no contiene el tamaño de la
407+
ventana, por lo que debe fijarse window=31, salvo que se conozca el valor
408+
utilizado para la compresión.
409+
</simpara>
410+
</listitem>
411+
412+
<listitem>
413+
<simpara>
414+
<literal>ZLIB o GZIP</literal>:
415+
utilice window=$W+32 para la detección automática del encabezado, de
416+
modo que ambos formatos puedan reconocerse y descomprimirse;
417+
window=15+32=47 es la opción más segura.
418+
</simpara>
419+
</listitem>
420+
</itemizedlist>
421+
422+
<parameter>memory</parameter> es una escala que indica cuánta memoria de
423+
trabajo debe asignarse.
307424
Los valores válidos van de 1, para la asignación mínima, a 9, para una
308-
asignación máxima. La asignación de memoria afecta la velocidad de ejecución,
309-
y no el coste global.
310-
</simpara>
425+
asignación máxima. La asignación de memoria afecta únicamente a la velocidad
426+
de ejecución y no influye en el tamaño de los datos generados.
427+
</para>
311428

312429
<note>
313430
<simpara>
@@ -332,23 +449,23 @@ fclose($fp);
332449
$params = array('level' => 6, 'window' => 15, 'memory' => 9);
333450
334451
$original_text = "This is a test.\nThis is only a test.\nThis is not an important string.\n";
335-
echo "El texto original es largo de " . strlen($original_text) . " bytes.\n";
452+
echo "El texto original tiene " . strlen($original_text) . " caracteres.\n";
336453
337454
$fp = fopen('test.deflated', 'w');
338455
stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_WRITE, $params);
339456
fwrite($fp, $original_text);
340457
fclose($fp);
341458
342-
echo "El fichero comprimido hace " . filesize('test.deflated') . " bytes de largo.\n";
343-
echo "El texto original era :\n";
459+
echo "El fichero comprimido tiene " . filesize('test.deflated') . " bytes.\n";
460+
echo "El texto original era:\n";
344461
/* Utiliza readfile y zlib.inflate para descomprimir al vuelo */
345462
readfile('php://filter/zlib.inflate/resource=test.deflated');
346463
347-
/* Muestra :
464+
/* Muestra:
348465
349-
El texto original es largo de 70 bytes
350-
El fichero comprimido hace 56 bytes de largo.
351-
El texto original era :
466+
El texto original tiene 70 caracteres.
467+
El fichero comprimido tiene 56 bytes.
468+
El texto original era:
352469
This is a test.
353470
This is only a test.
354471
This is not an important string.
@@ -367,20 +484,20 @@ This is not an important string.
367484
<![CDATA[
368485
<?php
369486
$original_text = "This is a test.\nThis is only a test.\nThis is not an important string.\n";
370-
echo "El texto original es largo de " . strlen($original_text) . " bytes.\n";
487+
echo "El texto original tiene " . strlen($original_text) . " caracteres.\n";
371488
372489
$fp = fopen('test.deflated', 'w');
373490
/* Aquí, "6" indica el nivel de compresión de 6 */
374491
stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_WRITE, 6);
375492
fwrite($fp, $original_text);
376493
fclose($fp);
377494
378-
echo "El fichero comprimido hace " . filesize('test.deflated') . " bytes de largo.\n";
495+
echo "El fichero comprimido tiene " . filesize('test.deflated') . " bytes.\n";
379496
380-
/* Muestra :
497+
/* Muestra:
381498
382-
El texto original es largo de 70 bytes
383-
El fichero comprimido hace 56 bytes de largo.
499+
El texto original tiene 70 caracteres.
500+
El fichero comprimido tiene 56 bytes.
384501
385502
*/
386503
?>
@@ -404,7 +521,7 @@ El fichero comprimido hace 56 bytes de largo.
404521

405522
<parameter>work</parameter> es también un &integer; cuyo valor va de
406523
0 a 250, e indica el nivel de esfuerzo proporcionado con un método de
407-
compresión antes de pasar a otro método, más lento. Modificar este
524+
compresión antes de pasar a otro método, más lento pero más fiable. Modificar este
408525
parámetro solo tiene efecto en la velocidad de compresión. La ganancia de espacio
409526
o la memoria utilizada permanecen iguales. Un nivel de 0 indica que la
410527
biblioteca debe utilizar su configuración por defecto.
@@ -432,19 +549,19 @@ El fichero comprimido hace 56 bytes de largo.
432549
<?php
433550
$param = array('blocks' => 9, 'work' => 0);
434551
435-
echo "El fichero original hace " . strlen(LICENSE) . " bytes de largo.\n";
552+
echo "El fichero original tiene " . filesize('LICENSE') . " bytes.\n";
436553
437554
$fp = fopen('LICENSE.compressed', 'w');
438555
stream_filter_append($fp, 'bzip2.compress', STREAM_FILTER_WRITE, $param);
439556
fwrite($fp, file_get_contents('LICENSE'));
440557
fclose($fp);
441558
442-
echo "El fichero comprimido hace " . filesize('LICENSE.compressed') . " bytes de largo.\n";
559+
echo "El fichero comprimido tiene " . filesize('LICENSE.compressed') . " bytes.\n";
443560
444-
/* Muestra :
561+
/* Muestra:
445562
446-
El fichero original hace 3288 bytes de largo.
447-
El fichero comprimido hace 1488 bytes de largo.
563+
El fichero original tiene 3288 bytes.
564+
El fichero comprimido tiene 1488 bytes.
448565
449566
*/
450567
?>
@@ -484,8 +601,8 @@ El fichero comprimido hace 1488 bytes de largo.
484601
<thead>
485602
<row>
486603
<entry>Parámetro</entry>
487-
<entry>Obligatorio ?</entry>
488-
<entry>Por omisión</entry>
604+
<entry>¿Obligatorio?</entry>
605+
<entry>Por defecto</entry>
489606
<entry>Valores posibles</entry>
490607
</row>
491608
</thead>
@@ -500,13 +617,13 @@ El fichero comprimido hace 1488 bytes de largo.
500617
<entry>algorithms_dir</entry>
501618
<entry>Opcional</entry>
502619
<entry>ini_get('mcrypt.algorithms_dir')</entry>
503-
<entry>Ruta hacia los algoritmos de módulos</entry>
620+
<entry>Ubicación de los módulos de algoritmos</entry>
504621
</row>
505622
<row>
506623
<entry>modes_dir</entry>
507624
<entry>Opcional</entry>
508625
<entry>ini_get('mcrypt.modes_dir')</entry>
509-
<entry>Ruta hacia los modos de módulos</entry>
626+
<entry>Ubicación de los módulos de modos</entry>
510627
</row>
511628
<row>
512629
<entry>iv</entry>

0 commit comments

Comments
 (0)