11.14 Liste des filtres standards
11 Annexes
Manuel PHP
. Filtres de chaînes de caractères . Filtres de conversion ->Filtres de compression . Filtres de chiffrement
|
11.14.3 Filtres de compression
Alors que les gestionnaires de compression
fournissent un moyen pour générer des fichiers aux formats gzip et bz2, ils ne permettent
pas de gérer les protocoles réseau compressés, ni de commencer avec un flux non
compressé pour le transformer en flux compressé. Pour faire cela, il faut
appliquer un filtre de compression.
| Note | |
Les filtres de compression
ne génère pas
les en-têtes
et fin de fichiers, comme le fait l'utilitaire
gzip
.
Ils ne font que compresser et décompresser des portions de flux de données.
|
zlib.deflate
(compression) et
zlib.inflate
(decompression) sont les implémentations
des méthodes de compression présentées dans la RFC 1951 .
Le filtre
deflate
prend jusqu'à trois paramètres, passés sous
la forme de tableau associatif.
level
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'absence de compression, et -1, qui
représente le niveau par défaut de la bibliothèque zlib : actuellement, c'est 6.
window
est la taille du buffer mémoire, en base 2.
Les valeurs supérieures, jusqu'à 15, soit 32768 octets, donnent de meilleures
compressions, et les valeurs inférieures, jusqu'à 9, soit 512 octets, occupent
le moins d'espace en mémoire. Par défaut,
window
vaut actuellement
15
.
memory
est une indication du niveau de mémoire nécessaire.
Les valeurs valides vont de 1, pour l'allocation minimale, à 9, pour une allocation
maximale. L'allocation de mémoire affecte la vitesse d'exécution, et non pas le
coût global.
| Note | |
Comme le niveau de compression est le paramètre le plus courant, il peut
aussi être fourni en passant un entier comme paramètre, au lieu d'un tableau.
|
Les filtres de compression zlib.* sont disponible avec PHP depuis la version
5.1.0
si le support zlib est activé.
Ils sont également disponibles pour les versions
5.0.x
en installant le paquet zlib_filter
depuis PECL . Ces filtres ne sont
pas
disponibles en PHP 4.
| zlib.deflate et zlib.inflate |
<?php $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 "Le texte original est long de " . strlen($original_text) . " octets.\n";
$fp = fopen('test.deflated', 'w'); stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_WRITE, $params); fwrite($fp, $original_text); fclose($fp);
echo "Le fichier compressé fait " . filesize('test.deflated') . " octets de long.\n"; echo "Le texte original était :\n"; /* Utilise readfile et zlib.inflate pour décompresser à la volée */ readfile('php://filter/zlib.inflate/resource=test.deflated');
/* Affiche :
Le texte original est long de 70 octets Le fichier compressé fait 56 octets de long. Le texte original était : This is a test. This is only a test. This is not an important string.
*/ ?>
|
| simple zlib.deflate |
<?php $original_text = "This is a test.\nThis is only a test.\nThis is not an important string.\n"; echo "Le texte original est long de " . strlen($original_text) . " octets.\n";
$fp = fopen('test.deflated', 'w'); /* Ici, "6" indique le niveau de compression de 6 */ stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_WRITE, 6); fwrite($fp, $original_text); fclose($fp);
echo "Le fichier compressé fait " . filesize('test.deflated') . " octets de long.\n";
/* Affiche :
Le texte original est long de 70 octets Le fichier compressé fait 56 octets de long.
*/ ?>
|
bzip2.compress
et
bzip2.decompress
fonctionnent de la même anière que les filtres zlib.
Le filtre
bzip2.compress
accepte jusqu'à 2 paramètres,
sous la forme d'un tableau associatif :
blocks
est une valeur entière, de 1 à 9,
an integer value
from 1 to 9 specifying the number of 100kbyte blocks of memory to allocate for
workspace.
work
est aussi un entier dont la valeur va de
0 à 250, et qui indique le niveau d'efforts fournis avec une méthode de
compression avant de passer à une autre méthode, plus lente. Modifier ce
paramètre n'a qu'un effet sur la vitesse de compression. Le gain d'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
bzip2.decompress
accepte uniquement un paramètre,
qui peut être passé sous la forme d'un booléen associé à l'index
small
.
small
, lorsqu'il vaut
TRUE
, indique à la bibliothèque
bzip qu'elle doit faire une décompression en utilisant le moins de mémoire
possible, aux dépends de la vitesse.
Les filtres bzip2.* ne sont pas inclus dans la distribution PHP depuis la version
5.1.0
si le support bz2 est activé.
Ils sont également disponibles pour les versions
5.0.x
de PHP en installant
le paquet bz2_filter depuis
PECL . Ces filtres ne sont
pas
disponibles pour PHP 4.
| bzip2.compress et bzip2.decompress |
<?php $param = array('blocks' => 9, 'work' => 0);
echo "Le texte original est long de " . strlen(LICENSE) . " octets.\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 "Le fichier compressé fait " . filesize('LICENSE.compressed') . " octets de long.\n";
/* Affiche :
Le texte original est long de 3288 octets. Le fichier compressé fait 1488 octets de long.
*/ ?>
|
|