<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.config.adapters.ini">
    <title>Zend_Config_Ini</title>

    <para>
        <classname>Zend_Config_Ini</classname> permet aux développeurs de stocker des données de
        configuration dans le format familier d'un fichier <acronym>INI</acronym> et de les lire
        dans l'application en employant une syntaxe de propriétés d'objet imbriquées. Le format
        <acronym>INI</acronym> est spécialisé pour fournir à la fois la capacité d'avoir une
        hiérarchie des données de configuration et permettre l'héritage entre les sections de
        données de configuration. La hiérarchie des données de configuration est supportée grâce
        au fractionnement des clés à l'aide de points (<emphasis>.</emphasis>). Une section peut
        être étendue ou héritée d'une autre section en suivant le nom de section avec le caractère
        de deux points (<emphasis>:</emphasis>) et le nom de la section de laquelle des données
        doivent être héritées.
    </para>

    <note>
        <title>Analyse d'un fichier INI</title>
        <para>
            <classname>Zend_Config_Ini</classname> utilise la fonction
            <ulink
                url="http://fr.php.net/parse_ini_file"><methodname>parse_ini_file()</methodname></ulink>
            de <acronym>PHP</acronym>. Veuillez prendre connaissance de la documentation pour
            appréhender ses comportements spécifiques, qui se propagent à
            <classname>Zend_Config_Ini</classname>, tel que la façon dont les valeurs
            spéciales&#160;: <constant>TRUE</constant>, <constant>FALSE</constant>,
            "yes", "no" et <constant>NULL</constant> sont manipulées.
        </para>
    </note>

    <note>
        <title>Séparateur de clé</title>
        <para>
            Par défaut, le séparateur de clé est le caractère point (<emphasis>.</emphasis>),
            cependant cela peut être changé en changeant la clé <property>nestSeparator</property>
            de <varname>$options</varname>
            en construisant l'objet
            <classname>Zend_Config_Ini</classname>. Par exemple&#160;:
        </para>

        <programlisting language="php"><![CDATA[
$options['nestSeparator'] = ':';
$options = new Zend_Config_Ini('/chemin/vers/config.ini',
                               'test',
                               $options);
]]></programlisting>
    </note>

    <example id="zend.config.adapters.ini.example.using">
        <title>Utiliser Zend_Config_Ini</title>

        <para>
            Cet exemple illustre une utilisation de base de <classname>Zend_Config_Ini</classname>
            pour le chargement des données de configuration à partir d'un fichier
            <acronym>INI</acronym>. Dans cet
            exemple il y a des données de configuration pour un environnement de production et pour
            un environnement de test. Puisque les données de configuration de l'environnement de
            test sont très semblables à celles de la production, la section de test hérite de la
            section de production. Dans ce cas, la décision est arbitraire et pourrait avoir été
            écrite réciproquement, avec la section de production héritant de la section de test,
            bien que ceci ne doit pas être le cas pour des situations plus complexes. Supposons,
            que les données suivantes de configuration sont contenues dans
            <filename>/chemin/vers/config.ini</filename>&#160;:
        </para>

        <programlisting language="ini"><![CDATA[
; Données de configuration du site de production
[production]
webhost                  = www.example.com
database.adapter         = pdo_mysql
database.params.host     = db.example.com
database.params.username = dbuser
database.params.password = secret
database.params.dbname   = dbname

; Données de configuration du site de test héritant du site
; de production et surchargeant les clés nécessaires
[test : production]
database.params.host     = dev.example.com
database.params.username = devuser
database.params.password = devsecret
]]></programlisting>

        <para>
            Ensuite, supposons que le développeur ait besoin des données de configuration de
            test issues du fichier <acronym>INI</acronym>. Il est facile de charger ces données
            en indiquant le fichier <acronym>INI</acronym> et la section de test&#160;:
        </para>

        <programlisting language="php"><![CDATA[
$config = new Zend_Config_Ini('/chemin/vers/config.ini', 'test');

echo $config->database->params->host;   // affiche "dev.example.com"
echo $config->database->params->dbname; // affiche "dbname"
]]></programlisting>
    </example>

    <note>
        <table id="zend.config.adapters.ini.table">
            <title>Paramètres du constructeur de Zend_Config_Ini</title>

            <tgroup cols="2">
                <thead>
                    <row>
                        <entry>Paramètres</entry>
                        <entry>Notes</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><varname>$filename</varname></entry>
                        <entry>Le fichier <acronym>INI</acronym> à charger.</entry>
                    </row>
                    <row>
                        <entry><varname>$section</varname></entry>
                        <entry>
                            La [section] dans le fichier <acronym>INI</acronym> qui doit être
                            chargé. L'affectation de <constant>NULL</constant> à ce paramètre
                            chargera toutes les sections. Alternativement, un tableau de noms
                            de section peut être fourni pour charger des sections multiples.
                        </entry>
                    </row>
                    <row>
                        <entry>
                            <varname>$options</varname> (par défaut <constant>FALSE</constant>)
                        </entry>
                        <entry>
                            Tableau d'options. Les clés suivantes sont supportées&#160;:
                            <itemizedlist>
                                <listitem>
                                    <para>
                                        <emphasis><property>allowModifications</property></emphasis>&#160;:
                                        Mettre à <constant>TRUE</constant> pour permettre la
                                        modification en mémoire des données de configuration
                                        chargées. Par défaut à <constant>FALSE</constant>.
                                    </para>
                                </listitem>
                                <listitem>
                                    <para>
                                        <emphasis><property>nestSeparator</property></emphasis>&#160;:
                                        Caractère à utiliser en tant que séparateur d'imbrication.
                                        Par défaut ".".
                                    </para>
                                </listitem>
                            </itemizedlist>
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </note>
</sect1>
