From 70f45e932b4c9c66ede1f924797a91e0e745ebe7 Mon Sep 17 00:00:00 2001 From: Louis-Arnaud Date: Tue, 15 Sep 2026 09:28:19 +0200 Subject: [PATCH] [Sync-En] filters: document the role of the zlib window parameter --- appendices/filters.xml | 219 +++++++++++++++++++++++++++++++---------- 1 file changed, 168 insertions(+), 51 deletions(-) diff --git a/appendices/filters.xml b/appendices/filters.xml index 673c71d8e..229cb9a86 100644 --- a/appendices/filters.xml +++ b/appendices/filters.xml @@ -1,5 +1,5 @@ - + Lista de filtros estándar @@ -54,8 +54,8 @@ ]]> @@ -75,8 +75,8 @@ fwrite($fp, "Ceci est un test.\n"); ]]> @@ -96,8 +96,8 @@ fwrite($fp, "Ceci est un test.\n"); ]]> @@ -121,16 +121,16 @@ fwrite($fp, "Ceci est un test.\n"); "); -fwrite($fp, "Ce texte en gras finit par être agrandi

en un titre 1

\n"); +stream_filter_append($fp, 'string.strip_tags', STREAM_FILTER_WRITE, ""); +fwrite($fp, "texto en negrita ampliado a un

encabezado de nivel 1

\n"); fclose($fp); -/* muestra : Ce texte en gras finit par être agrandi en un titre 1 */ +/* Muestra: texto en negrita ampliado a un encabezado de nivel 1 */ $fp = fopen('php://output', 'w'); -stream_filter_append($fp, 'string.strip_tags', STREAM_FILTER_WRITE, array('strong','em','span')); -fwrite($fp, "Ce texte en gras finit par être agrandi

en un titre 1

\n"); +stream_filter_append($fp, 'string.strip_tags', STREAM_FILTER_WRITE, array('b','i','u')); +fwrite($fp, "texto en negrita ampliado a un

encabezado de nivel 1

\n"); fclose($fp); -/* muestra : Ce texte en gras finit par être agrandi en un titre 1 */ +/* Muestra: texto en negrita ampliado a un encabezado de nivel 1 */ ?> ]]> @@ -174,22 +174,22 @@ $fp = fopen('php://output', 'w'); stream_filter_append($fp, 'convert.base64-encode'); fwrite($fp, "This is a test.\n"); fclose($fp); -/* muestra : VGhpcyBpcyBhIHRlc3QuCg== */ +/* Muestra: VGhpcyBpcyBhIHRlc3QuCg== */ $param = array('line-length' => 8, 'line-break-chars' => "\r\n"); $fp = fopen('php://output', 'w'); stream_filter_append($fp, 'convert.base64-encode', STREAM_FILTER_WRITE, $param); fwrite($fp, "This is a test.\n"); fclose($fp); -/* muestra : VGhpcyBp - : cyBhIHRl - : c3QuCg== */ +/* Muestra: VGhpcyBp + : cyBhIHRl + : c3QuCg== */ $fp = fopen('php://output', 'w'); stream_filter_append($fp, 'convert.base64-decode'); fwrite($fp, "VGhpcyBpcyBhIHRlc3QuCg=="); fclose($fp); -/* muestra : This is a test. */ +/* Muestra: This is a test. */ ?> ]]> @@ -223,7 +223,7 @@ fclose($fp); $fp = fopen('php://output', 'w'); stream_filter_append($fp, 'convert.quoted-printable-encode'); fwrite($fp, "This is a test.\n"); -/* muestra : =This is a test.=0A */ +/* Muestra: =This is a test.=0A */ ?> ]]> @@ -282,7 +282,7 @@ fclose($fp);
zlib.deflate y zlib.inflate - + zlib.deflate (compresión) y zlib.inflate (descompresión) son las implementaciones de los métodos de compresión presentados en la @@ -296,18 +296,135 @@ fclose($fp); 0, que representa la ausencia de compresión, y -1, que representa el nivel por defecto de zlib: actualmente, 6. - window 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, + window es el logaritmo en base 2 del tamaño de la + ventana de compresión. Los valores superiores, hasta 15, es decir, 32768 bytes, + dan una mejor compresión a costa de más memoria, y los valores inferiores, + hasta 9, es decir, 512 bytes, dan una compresión menor ocupando menos + espacio en memoria. Por defecto, window vale actualmente 15. - memory es una indicación del nivel de memoria - necesario. + El filtro zlib.deflate implementa los métodos de + compresión DEFLATE, ZLIB y + GZIP según el valor del parámetro + window. + + Los 4 bits inferiores del parámetro window fijan el tamaño del + «búfer de historial» interno utilizado, siendo el logaritmo en base 2 de su + tamaño, en un rango de 8 a 15. El significado de los demás bits del + parámetro window puede fijarse como se describe a continuación. + + + + + DEFLATE (RFC 1951) + es un algoritmo de compresión sin tratar, sin encabezado ni suma de + verificación. Se aplica cuando el parámetro window se fija en el rango + de -9 a -15. Este algoritmo de compresión es la base de todos los + formatos generados por el filtro zlib.deflate. + Las funciones correspondientes que operan directamente sobre strings son + gzdeflate y gzinflate. + + + + + + ZLIB (RFC 1950) + aplica el algoritmo DEFLATE y añade un encabezado de + 2 bytes y un tráiler de 4 bytes que contiene la suma de verificación + Adler32 de los datos sin comprimir, en orden de bytes big-endian: + + + El encabezado de 2 bytes, leído como un número de 16 bits sin signo en + orden big-endian, debe ser múltiplo de 31. + Este formato se genera cuando el parámetro window se fija en el rango + de 8 a 15. + Las funciones correspondientes que operan directamente sobre strings son + gzcompress y gzuncompress. + + + + + + GZIP (RFC 1952) + aplica el algoritmo DEFLATE añadiendo un encabezado y + un tráiler con la suma de verificación CRC32 de los + datos sin comprimir y su longitud, ambos en orden de bytes little-endian: + + + Es el formato de los ficheros .gz, en el que + GZIPHEADER contiene, en este orden, la firma + GZIP (\x1f\x8B), el método de + compresión (\x08), un byte de flags a cero, una fecha + de modificación a cero en 4 bytes, un byte de flags adicionales que + depende del nivel de compresión, y el sistema operativo fijado al sistema + actual (\x00 = sistema de ficheros FAT, + \x03 = Unix, etc.). + Este formato se genera cuando el parámetro window se fija en el rango + de 9+16=25 a 15+16=31. Tenga en cuenta que existe un límite de 4GB para + la longitud máxima de los datos sin comprimir; más allá de este límite, + solo se almacena el módulo 2^32 de la longitud real en la parte + LENGTH. + Las funciones correspondientes que operan directamente sobre strings son + gzencode y gzdecode; la + función gzopen permite leer y escribir ficheros + .gz. + + + + + Con el filtro zlib.inflate, solo se admite el parámetro + window; cualquier otro parámetro + (memory, level) se ignora. + Sea $W el logaritmo en base 2 del tamaño del búfer de historial, de modo + que el descompresor asigna 2^$W bytes. Para el formato ZLIB, este valor + debe ser mayor o igual al registrado en el encabezado, lo cual se + comprueba durante la descompresión; para los demás formatos, basta con + que sea lo suficientemente grande para las distancias de coincidencia + realmente presentes en los datos. + El rango es 9 ≤ $W ≤ 15. Si se desconoce, $W=15 es la opción más segura. + + + + + DEFLATE (RFC 1951): + utilice window=-$W, siendo $W un valor no inferior al utilizado para + la compresión. Si se desconoce, fije window=-15. + + + + + + ZLIB (RFC 1950): + utilice window=$W. El valor de $W puede obtenerse del propio encabezado + ZLIB; en caso contrario, fije window=15. + + + + + + GZIP (RFC 1952): + utilice window=$W+16. Un encabezado GZIP no contiene el tamaño de la + ventana, por lo que debe fijarse window=31, salvo que se conozca el valor + utilizado para la compresión. + + + + + + ZLIB o GZIP: + utilice window=$W+32 para la detección automática del encabezado, de + modo que ambos formatos puedan reconocerse y descomprimirse; + window=15+32=47 es la opción más segura. + + + + + memory es una escala que indica cuánta memoria de + trabajo debe asignarse. 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. - + asignación máxima. La asignación de memoria afecta únicamente a la velocidad + de ejecución y no influye en el tamaño de los datos generados. + @@ -332,23 +449,23 @@ fclose($fp); $params = array('level' => 6, 'window' => 15, 'memory' => 9); $original_text = "This is a test.\nThis is only a test.\nThis is not an important string.\n"; -echo "El texto original es largo de " . strlen($original_text) . " bytes.\n"; +echo "El texto original tiene " . strlen($original_text) . " caracteres.\n"; $fp = fopen('test.deflated', 'w'); stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_WRITE, $params); fwrite($fp, $original_text); fclose($fp); -echo "El fichero comprimido hace " . filesize('test.deflated') . " bytes de largo.\n"; -echo "El texto original era :\n"; +echo "El fichero comprimido tiene " . filesize('test.deflated') . " bytes.\n"; +echo "El texto original era:\n"; /* Utiliza readfile y zlib.inflate para descomprimir al vuelo */ readfile('php://filter/zlib.inflate/resource=test.deflated'); -/* Muestra : +/* Muestra: -El texto original es largo de 70 bytes -El fichero comprimido hace 56 bytes de largo. -El texto original era : +El texto original tiene 70 caracteres. +El fichero comprimido tiene 56 bytes. +El texto original era: This is a test. This is only a test. This is not an important string. @@ -367,7 +484,7 @@ This is not an important string. @@ -404,7 +521,7 @@ El fichero comprimido hace 56 bytes de largo. work es también un &integer; 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 + compresión antes de pasar a otro método, más lento pero más fiable. 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. @@ -432,19 +549,19 @@ El fichero comprimido hace 56 bytes de largo. 9, 'work' => 0); -echo "El fichero original hace " . strlen(LICENSE) . " bytes de largo.\n"; +echo "El fichero original tiene " . filesize('LICENSE') . " bytes.\n"; $fp = fopen('LICENSE.compressed', 'w'); stream_filter_append($fp, 'bzip2.compress', STREAM_FILTER_WRITE, $param); fwrite($fp, file_get_contents('LICENSE')); fclose($fp); -echo "El fichero comprimido hace " . filesize('LICENSE.compressed') . " bytes de largo.\n"; +echo "El fichero comprimido tiene " . filesize('LICENSE.compressed') . " bytes.\n"; -/* Muestra : +/* Muestra: -El fichero original hace 3288 bytes de largo. -El fichero comprimido hace 1488 bytes de largo. +El fichero original tiene 3288 bytes. +El fichero comprimido tiene 1488 bytes. */ ?> @@ -484,8 +601,8 @@ El fichero comprimido hace 1488 bytes de largo. Parámetro - Obligatorio ? - Por omisión + ¿Obligatorio? + Por defecto Valores posibles @@ -500,13 +617,13 @@ El fichero comprimido hace 1488 bytes de largo. algorithms_dir Opcional ini_get('mcrypt.algorithms_dir') - Ruta hacia los algoritmos de módulos + Ubicación de los módulos de algoritmos modes_dir Opcional ini_get('mcrypt.modes_dir') - Ruta hacia los modos de módulos + Ubicación de los módulos de modos iv