CXIII. Compression Zlib

Introduction

Ce module donne accès aux fichiers compressés avec l' utilitaire gzip , grâce à des fonctions semblables aux fonctions d'accès aux fichiers , qui fonctionnent avec les fichiers compressés ou non (mais pas avec les sockets ) .

La version 4.0.4 a introduit la version étendue de fopen( ) pour les fichiesr compressés avec GZ . Vous pouvez utiliser le préfixe spécial zlib : dans les URL pour accéder directement et de manière transparente aux fichiers compressés par GZ , avec toutes les fonctions f* habituelles .

En version 4.3.0 , ce préfixe spécial est remplacé par zlib : / / pour éviter les ambiguités avec les fichiers contenant des deux points : .

Cette fonctionnalité requiert une librarie C qui fournisse la fonction fopencookie( ) . A ma connaissance , la librairie GNU libc est la seule à fournir cette fonctionnalité .

Pré-requis

Ce module utilise les fonctions de la librairie zlib Ce module utilise les fonctions de la librairie zlib de Jean-loup Gailly et Mark Adler . Vous devez utiliser zlib version = 1.0.9 avec ce module .

Configuration à l'exécution

L' extension zlib offre l 'option de compresser à la volée les pages web , si le navigateur client le supporte . Il existe donc deux options dans le fichier de configuration php.ini .

Tableau 1 . Options de configuration Zlib

Nom Défaut
" 0 "
Pour plus de détails sur les constantes PHP_INI_*, voyez ini_set() .

Voici une explication rapide des directives de configuration .

zlib.output_compression boolean / integer

Compression à la volée des pages . Si cette option est mise à " On " dans php.ini ou dans la configuration d'Apache , les page sont compressées si le navigateur envoie un entête HTTP "Accept-Encoding : gzip " ou "deflate " . "Content-Encoding : gzip " (respectivement "deflate" ) et "Vary : Accept-Encoding " sont alors ajoutés au résultat.

Vous pouvez utiliser la fonction ini_set( ) pour désactiver cette configuration durant un script , si les entêtes HTTP n 'ont pas été envoyé . Si vous envoyez un entête " Content-Type : image / " , alors la compression sera désactivée (afin d'éviter un bug de Netscape ) . Vous pouvez réactiver cette compression en utilisant la ligne ini_set( 'zlib.output_compression' , 'On' ) après avoir appelé la fonction header qui fixe le type .

Cette option accepte aussi des valeurs entières au lieu d' un booléen "On" / "Off " . Cela vous permet de modifier la taille du buffer de sortie .

zlib.output_compression_level integer

Niveau de compression utilisé pour la compression de sortie .



Types de ressources

Cette extension ne définit aucune ressource .

Constantes Prédefinies

Ces constantes sont définies par cette extension , et ne sont disponibles que si cette extension a été compilée avec PHP , ou bien chargée au moment de l ' exécution .

FORCE_GZIP ( entier )

FORCE_DEFLATE ( entier )

Exemples

Cet exemple ouvre un fichier temporaire , écrit une page de test dedans , puis affiche le contenu du fichier deux fois .

Exemple 1 . Exemple de l ' extension Zlib

 
?php

 
$filename

 
=

 
tempnam

 
(

 
'

 
/

 
tmp'

 
,

 
'zlibtest')

 
.'.gz'

 
;

 
print

 
"

 
html

 
\n

 
head

 
/

 
head

 
\n

 
body

 
\n

 
pre

 
\n"

 
;

 
$s

 
=

 
"C'est

 
juste

 
un

 
test

 
,

 
test

 
,

 
test

 
,

 
test

 
,

 
test

 
,

 
test

 
,

 
test

 
,

 
test!\n"

 
;

 
/

 
/

 
ouvre

 
le

 
fichier

 
en

 
eacute;criture

 
avec

 
la

 
compression

 
maximale

 
$zp

 
=

 
gzopen($filename

 
,

 
"w9")

 
;

 
/

 
/

 
eacute;crit

 
uen

 
cha

 
icirc;ne

 
dans

 
le

 
fichier

 
gzwrite($zp

 
,

 
$s)

 
;

 
/

 
/

 
ferme

 
le

 
fichier

 
gzclose($zp)

 
;

 
/

 
/

 
ouvre

 
le

 
fichier

 
en

 
lecture

 
$zp

 
=

 
gzopen($filename

 
,

 
"r")

 
;

 
/

 
/

 
lit

 
3

 
caract

 
egrave;res

 
print

 
gzread($zp

 
,

 
3)

 
;

 
/

 
/

 
affiche

 
le

 
reste

 
du

 
fichier

 
,

 
puis

 
le

 
ferme

 
gzpassthru($zp)

 
;

 
print

 
"\n"

 
;

 
/

 
/

 
ouvre

 
le

 
fichier

 
et

 
affiche

 
le

 
fichier

 
une

 
seconde

 
fois

 
if

 
(readgzfile($filename

 
)

 
!=

 
strlen($s)

 
)

 
{

 
echo

 
"Erreur

 
avec

 
les

 
fonctions

 
zlib

 
!"

 
;

 
}

 
unlink($filename)

 
;

 
print

 
"

 
/

 
pre

 
\n

 
/

 
h1

 
/

 
body

 
\n

 
/

 
html

 
\n"

 
;

 

?



Table des matières
gzclose -- Ferme un fichier compressé
gzcompress -- Compresse une chaîne
gzdeflate -- Compresse une chaîne avec la méthode DEFLATE
gzencode -- Crée une chaîne compressée
gzeof -- Indique si la fin d'un fichier compressé est atteinte
gzfile -- Lit la totalité d'un fichier compressé
gzgetc -- Lit un caractère dans un fichier compressé
gzgets -- Lit une ligne dans un fichier compressé
gzgetss -- Lit une ligne dans un ficheir compressé, et supprime les balises
gzinflate -- Décompresse une chaîne
gzopen -- Ouvre un fichier compressé avec gzip
gzpassthru -- Affiche le contenu d'un fichier en une seule fois
gzputs -- Ecrit une chaîne dans un fichier compressé
gzread -- Lecture de fichier compressé binaire
gzrewind -- Recommence la lecture du fichier
gzseek -- Déplace le pointeur de lecture
gztell -- Lit la position courante du pointeur de lecture
gzuncompress -- Décompresse une chaîne compressée
gzwrite -- Ecrit dans un fichier compressé, en gzip
readgzfile -- Lit tout le fichier compressé