<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect2 id="zend.filter.set.compress">
    <title>Compression et décompression</title>
    <para>
        Ces deux filtres sont capables de compresser et décompresser des chaines, des fichiers ou
        des dossiers.
    </para>

    <sect3 id="zend.filter.set.compress.options">
        <title>Options supportées par Zend_Filter_Compress et Zend_Filter_Decompress</title>

        <para>
            Les options suivantes sont supportées par
            <classname>Zend_Filter_Compress</classname> et
            <classname>Zend_Filter_Decompress</classname>&#160;:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis><property>adapter</property></emphasis>&#160;: l'adaptateur de
                    compression qui doit être utrilisé. Vaut par défaut <property>Gz</property>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis><property>options</property></emphasis>&#160;: options additionnelles
                    qui sont fournies à l'initialisation de l'adaptateur. Chaque adaptateur
                    supporte ses propres options.
                </para>
            </listitem>
        </itemizedlist>
    </sect3>

    <sect3 id="zend.filter.set.compress.basic">
        <title>Adaptateurs de compression supportés</title>

        <para>
            Les formats de compression suivants sont supportés par leurs adaptateurs
            respectifs&#160;:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis>Bz2</emphasis>
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Gz</emphasis>
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Lzf</emphasis>
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Rar</emphasis>
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Tar</emphasis>
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Zip</emphasis>
                </para>
            </listitem>
        </itemizedlist>

        <para>
            Chaque format de compression possède des caractéristiques propres et ils s'utilisent
            tous d'une manière commune. Seules leurs options vont différer ainsi que les types
            de compressions qu'ils offrent (algorithmes, fichiers, chaines et dossiers)
        </para>
    </sect3>

    <sect3 id="zend.filter.set.compress.generic">
        <title>Les bases</title>

        <para>
            Pour créer un filtre de compression vous devez sélectionner le format que vous désirez.
            La description suivante utilisera l'adaptateur <emphasis>Bz2</emphasis>. Les détails
            des autres adaptateurs seront précisés plus tard dans la section suivante.
        </para>

        <para>
            Les deux filtres (compression et décompression) sont identiques lorsqu'ils utilisent le
            même adaptateur. Simplement <classname>Zend_Filter_Compress</classname> est utilisé
            pour les opérations de compression alors que <classname>Zend_Filter_Decompress</classname>
            est utilisé pour la décompression.
        </para>

        <para>
            Par exemple, si nous voulons compresser une chaine nous devons instancier
            <classname>Zend_Filter_Compress</classname> et indiquer un adaptateur.
        </para>

        <programlisting language="php"><![CDATA[
$filter = new Zend_Filter_Compress('Bz2');
]]></programlisting>

        <para>
            Les adaptateurs se spécifient donc dans le constructeur.
        </para>

        <para>
            Il est aussi possible de passer des options sous forme de tableau ou d'objet
            <classname>Zend_Config</classname>. Si vous souhaitez préciser des options, vous devez
            alors au minimum indiquer la clé "adapter". Les clés "options" ou
            "adapterOptions" peuvent ensuite être utilisées et doivent représenter un tableau.
        </para>

        <programlisting language="php"><![CDATA[
$filter = new Zend_Filter_Compress(array(
    'adapter' => 'Bz2',
    'options' => array(
        'blocksize' => 8,
    ),
));
]]></programlisting>

        <note>
            <title>Adaptateur de compression par défaut</title>

            <para>
                Lorsque vous ne précisez aucun adaptateur, <emphasis>Gz</emphasis> sera utilisé
                par défaut.
            </para>
        </note>

        <para>
            Concernant la décompression, le principe est exactement identique.
        </para>

        <programlisting language="php"><![CDATA[
$filter = new Zend_Filter_Decompress('Bz2');
]]></programlisting>

        <para>
            Pour récupérer une chaine compressée, il faut indiquer la chaine originale.
            La valeur "filtrée" récupérée sera alors la chaine compressée, tout simplement.
        </para>

        <programlisting language="php"><![CDATA[
$filter     = new Zend_Filter_Compress('Bz2');
$compressed = $filter->filter('Uncompressed string');
// Retourne la chaine compressée
]]></programlisting>

        <para>
            La décompression suit exactement le même principe.
        </para>

        <programlisting language="php"><![CDATA[
$filter     = new Zend_Filter_Decompress('Bz2');
$compressed = $filter->filter('Compressed string');
// Retourne la chaine décompressée
]]></programlisting>

        <note>
            <title>Note sur la compression de chaines</title>

            <para>
                Tous les adaptateurs ne supportent pas la compression de chaines. Les formats tels que
                <emphasis>Rar</emphasis> ne savent que traiter des fichiers ou des répertoires. Pour les détails,
                consultez la documentation relative à l'adaptateur en question.
            </para>
        </note>
    </sect3>

    <sect3 id="zend.filter.set.compress.archive">
        <title>Créer une archive</title>

        <para>
            Créer une archive fonctionne quasiment de la même manière que la compression d'une chaine.
            Cependant dans ce cas, nous devons préciser une options supplémentaire indiquant le nom
            de l'archive à créer.
        </para>

        <programlisting language="php"><![CDATA[
$filter     = new Zend_Filter_Compress(array(
    'adapter' => 'Bz2',
    'options' => array(
        'archive' => 'filename.bz2',
    ),
));
$compressed = $filter->filter('Uncompressed string');
// Retourne true en cas de succès et crée le fichier d'archive
]]></programlisting>

        <para>
            Dans l'exemple ci-dessus, la chaine est compressée puis retournée dans une archive.
        </para>

        <note>
            <title>Les archives existantes seront écrasées</title>

            <para>
                Si l'archive existe déja, elle sera écrasée.
            </para>
        </note>

        <para>
            Si vous souhaitez compresser un fichier, vous devez fournir son chemin.
        </para>

        <programlisting language="php"><![CDATA[
$filter     = new Zend_Filter_Compress(array(
    'adapter' => 'Bz2',
    'options' => array(
        'archive' => 'filename.bz2'
    ),
));
$compressed = $filter->filter('C:\temp\compressme.txt');
// Retourne true en cas de succès et crée le fichier d'archive
]]></programlisting>

        <para>
            Il est aussi possible de préciser le nom d'un dossier plutôt que d'un fichier.
            Dans ce cas, tout le dossier sera compressé, récursivement.
        </para>

        <programlisting language="php"><![CDATA[
$filter     = new Zend_Filter_Compress(array(
    'adapter' => 'Bz2',
    'options' => array(
        'archive' => 'filename.bz2'
    ),
));
$compressed = $filter->filter('C:\temp\somedir');
// Retourne true en cas de succès et crée le fichier d'archive
]]></programlisting>

        <note>
            <title>Ne compressez pas un dossier trop gros ou trop profond</title>

            <para>
                Vous ne devriez jamais tenter de compresser un dossier trop gros ou trop profond, comme
                par exemple une partition complète. Une telle opération s'avère très longue et très
                couteuse en ressources ce qui peut provoquer des problèmes sur votre serveur.
            </para>
        </note>
    </sect3>

    <sect3 id="zend.filter.set.compress.decompress">
        <title>Décompresser une archive</title>

        <para>
            Décompresser une archive s'éxecute d'une manière sensiblement identique à la compression.
            Vous devez passer le paramètre <property>archive</property> ou préciser le nom du fichier.
        </para>

        <programlisting language="php"><![CDATA[
$filter     = new Zend_Filter_Decompress('Bz2');
$compressed = $filter->filter('filename.bz2');
// Retourne true en cas de succès et décompresse le fichier d'archive
]]></programlisting>

        <para>
            Certains adaptateurs permettent la décompression d'une archive dans un dossier cible,
            dans ce cas le paramètre <property>target</property> permet de l'indiquer.
        </para>

        <programlisting language="php"><![CDATA[
$filter     = new Zend_Filter_Decompress(array(
    'adapter' => 'Zip',
    'options' => array(
        'target' => 'C:\temp',
    )
));
$compressed = $filter->filter('filename.zip');
// Retourne true en cas de succès et décompresse le fichier d'archive
// dans le dossier spécifié
]]></programlisting>

        <note>
            <title>Les dossiers de cible doivent exister</title>

            <para>
                Lorsque vous souhaitez décompresser une archive dans un dossier cible, vérifiez
                bien que celui-ci existe déja.
            </para>
        </note>
    </sect3>

    <sect3 id="zend.filter.set.compress.bz2">
        <title>Adaptateur Bz2</title>

        <para>
            L'adaptateur Bz2 peut compresser et décompresser:
        </para>

        <itemizedlist>
            <listitem>
                <para>Chaines</para>
            </listitem>

            <listitem>
                <para>Fichiers</para>
            </listitem>

            <listitem>
                <para>Dossiers</para>
            </listitem>
        </itemizedlist>

        <para>
            Cet adaptateur utilise l'extension <acronym>PHP</acronym> Bz2.
        </para>

        <para>
            Pour personnaliser la compression, cet adaptateur utilise les options suivantes:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis>Archive</emphasis>: Précise l'archive à utiliser ou à créer.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Blocksize</emphasis>: Précise la taille des blocs. Des valeurs de
                    '0' à '9' sont permises. La valeur par défaut est '4'.
                </para>
            </listitem>
        </itemizedlist>

        <para>
            Toutes les options peuvent être passées à l'instanciation ou en utilisant des méthodes.
            Par exemple pour la tailles des blocs, <methodname>getBlocksize()</methodname> et
            <methodname>setBlocksize()</methodname>. La méthode
            <methodname>setOptions()</methodname> est aussi présente, elle accepte un tableau
        </para>
    </sect3>

    <sect3 id="zend.filter.set.compress.gz">
        <title>Adaptateur Gz</title>

        <para>
            L'adaptateur Bz2 peut compresser et décompresser:
        </para>

        <itemizedlist>
            <listitem>
                <para>Chaines</para>
            </listitem>

            <listitem>
                <para>Fichiers</para>
            </listitem>

            <listitem>
                <para>Dossiers</para>
            </listitem>
        </itemizedlist>

        <para>
            Cet adaptateur utilise l'extension <acronym>PHP</acronym> Zlib.
        </para>

        <para>
            Pour personnaliser la compression, cet adaptateur utilise les options suivantes:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis>Archive</emphasis>: L'archive à créer ou à utiliser.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Level</emphasis>: Niveau de compression. Des valeurs de '0'
                    à '9' sont utilisables, par défaut : '9'.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Mode</emphasis>: Il existe deux modes supportés : 'compress'
                    et 'deflate'. La valeur par défaut est 'compress'.
                </para>
            </listitem>
        </itemizedlist>

        <para>
            Toutes les options peuvent être passées en constructeur ou en utilisant des méthodes.
            Par exemple, pour l'option 'Level', <methodname>getLevel()</methodname> et
            <methodname>setLevel()</methodname>. La méthode
            <methodname>setOptions()</methodname> est aussi présente et accepte un tableau.
        </para>
    </sect3>

    <sect3 id="zend.filter.set.compress.lzf">
        <title>Adaptateur Lzf</title>

        <para>
            L'adaptateur Lzf peut compresser et décompresser:
        </para>

        <itemizedlist>
            <listitem>
                <para>Chaines</para>
            </listitem>
        </itemizedlist>

        <note>
            <title>Lzf ne supporte que les chaines de caractères</title>

            <para>
                Lzf ne supporte pas les fichiers et les dossiers.
            </para>
        </note>

        <para>
            Cet adaptateur utilise l'extension <acronym>PHP</acronym>Lzf.
        </para>

        <para>
            Il n'existe pas d'options pour personnaliser cet adaptateur.
        </para>
    </sect3>

    <sect3 id="zend.filter.set.compress.rar">
        <title>Adaptateur Rar</title>

        <para>
            L'adaptateur Rar peut compresser et décompresser:
        </para>

        <itemizedlist>
            <listitem>
                <para>Fichiers</para>
            </listitem>

            <listitem>
                <para>Dossiers</para>
            </listitem>
        </itemizedlist>

        <note>
            <title>Rar ne supporte pas les chaines de caractères</title>

            <para>
                L'adaptateur Rar ne supporte pas les chaines de caractères
            </para>
        </note>

        <para>
            Cet adaptateur utilise l'extension <acronym>PHP</acronym> Rar.
        </para>

        <note>
            <title>Compression Rar non supportée</title>

            <para>
                Des restrictions du format Rar ne permettent pas la compression gratuite. Si vous souhaitez
                compresser avec cet adaptateur, vous devrez passer une fonction de callback qui utilisera
                un algorithme ou fera appel à un programme externe.
            </para>
        </note>

        <para>
            Cet adaptateur accepte les options suivantes:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis>Archive</emphasis>: Précise l'archive à créer ou à utiliser.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Callback</emphasis>: Une fonction de callback fournissant des services
                    de compression à l'adaptateur.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Password</emphasis>: Le mot de passe à utiliser éventuellement en cas
                    de décompression.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Target</emphasis>: La cible vers laquelle les fichiers décompressés seront
                    écrits.
                </para>
            </listitem>
        </itemizedlist>

        <para>
            Toutes les options peuvent être passées au constructeurs ou via des méthodes.
            Par exemple, pour l'option 'Target', <methodname>getTarget()</methodname> et
            <methodname>setTarget()</methodname>.La méthode
            <methodname>setOptions()</methodname> est aussi disponible et accepte un tableau.
        </para>
    </sect3>

    <sect3 id="zend.filter.set.compress.tar">
        <title>Tar Adapter</title>

        <para>
            L'adaptateur Tar peut compresser et décompresser:
        </para>

        <itemizedlist>
            <listitem>
                <para>Fichiers</para>
            </listitem>

            <listitem>
                <para>Dossiers</para>
            </listitem>
        </itemizedlist>

        <note>
            <title>Tar ne supporte pas les chaines de caractères</title>

            <para>
                L'adaptateur Tar ne supporte pas les chaines de caractères
            </para>
        </note>

        <para>
            Cet adaptateur utilise le paquet <acronym>PEAR</acronym>
            <classname>Archive_Tar</classname>.
        </para>

        <para>
            Cet adaptateur accepte les options suivantes:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis>Archive</emphasis>: Précise l'archive à utiliser ou à créer.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Mode</emphasis>: Mode de compression. Les modes supportés sont
                    'null' qui signifie pas de compression, 'Gz' qui utilisera l'extension
                    <acronym>PHP</acronym> Zlib et 'Bz2' qui utilisera l'extension
                    <acronym>PHP</acronym>Bz2. La valeur par défaut est 'null'.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Target</emphasis>: La cible vers laquelle les fichier décompressés
                    seront écrits.
                </para>
            </listitem>
        </itemizedlist>

        <para>
            Toutes les options peuvent être passées au constructeurs ou via des méthodes.
            Par exemple, pour l'option 'Target', <methodname>getTarget()</methodname> et
            <methodname>setTarget()</methodname>.La méthode
            <methodname>setOptions()</methodname> est aussi disponible et accepte un tableau.
        </para>

        <note>
            <title>Utilisation avec des dossiers</title>

            <para>
                La compression des dossiers avec Tar utilise le chemin complet comme nom de fichier.
            </para>
        </note>
    </sect3>

    <sect3 id="zend.filter.set.compress.zip">
        <title>Adaptateur Zip</title>

        <para>
            L'adaptateur Zip peut compresser et décompresser:
        </para>

        <itemizedlist>
            <listitem>
                <para>Chaines</para>
            </listitem>

            <listitem>
                <para>Fichiers</para>
            </listitem>

            <listitem>
                <para>Dossiers</para>
            </listitem>
        </itemizedlist>

        <note>
            <title>Zip ne supporte pas la décompression vers des chaines</title>

            <para>
                L'adaptateur Zip ne supporte pas la décompression vers des chaines.
                Un fichier sera systématiquement crée.
            </para>
        </note>

        <para>
            Cet adaptateur utilise l'extension <acronym>PHP</acronym>
            <classname>Zip</classname>.
        </para>

        <para>
            Les options suivantes sont supportées :
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis>Archive</emphasis>: Précise l'archive qui sera utilisée ou
                    créee.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Target</emphasis>: La cible vers laquelle décompresser.
                </para>
            </listitem>
        </itemizedlist>

        <para>
            Toutes les options peuvent être passées au constructeurs ou via des méthodes.
            Par exemple, pour l'option 'Target', <methodname>getTarget()</methodname> et
            <methodname>setTarget()</methodname>.La méthode
            <methodname>setOptions()</methodname> est aussi disponible et accepte un tableau.
        </para>
    </sect3>
</sect2>
