<?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> ermöglicht es Entwicklern, Konfigurations-Daten in
        einem vertrauten <acronym>INI</acronym> Format zu speichern und sie mit einer Syntax
        auszulesen, die dem Zugriff auf die Eigenschaften verschachtelter Objekte entspricht. Das
        verwendete <acronym>INI</acronym> Format bietet einerseits die Möglichkeit, Konfigurations
        Daten hierarchisch abzulegen und andererseits Vererbung zwischen Sektionen zu
        spezifizieren. Konfigurations-Daten-Hierarchien werden durch das Trennen der
        Schlüsselwörter durch einen Punkt (<emphasis>.</emphasis>). Eine Sektion kann eine andere
        Sektion erweitern oder beerben indem man nach dem Sektionsname einen Doppelpunkt
        (<emphasis>:</emphasis>) notiert, gefolgt vom Namen der zu beerbenden Sektion.
    </para>

    <note>
        <title>Die Ini Datei parsen</title>

        <para>
            <classname>Zend_Config_Ini</classname> verwendet die <acronym>PHP</acronym> Funktion
            <ulink
                url="http://php.net/parse_ini_file"><methodname>parse_ini_file()</methodname></ulink>.
            Deren Dokumentation klärt über spezielle Verhaltensweisen auf, die sich auch auf
            <classname>Zend_Config_Ini</classname> auswirken, z. B. wie die besonderen Werte
            "<constant>TRUE</constant>", "<constant>FALSE</constant>", "yes", "no" und
            "<constant>NULL</constant>" gehandhabt werden.
        </para>
    </note>

    <note>
        <title>Schlüssel Trenner</title>

        <para>
            Standardmäßig ist das Schlüssel Trennzeichen der Punkt (<emphasis>.</emphasis>). Dies
            kann geändert werden, indem der <varname>$options</varname> Schlüssel
            <property>nestSeparator</property> geändert wird, wenn das
            <classname>Zend_Config_Ini</classname> Objekt instanziert wird.
            Zum Beispiel:
        </para>

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

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

        <para>
            Dieses Beispiel zeigt die grundlegende Nutzung von
            <classname>Zend_Config_Ini</classname> um Konfigurations-Daten aus einer
            <acronym>INI</acronym> Datei zu laden. In diesem Beispiel gibt es Konfigurations-Daten
            für ein Produktiv- und ein Staging-System. Da sich die Daten für das Staging-System nur
            unwesentlich von denen für das Produktiv-System unterscheiden, erbt das Staging-System
            vom Produktiv-System. In diesem Fall ist die Entscheidung darüber, welche Sektion von
            welcher erben soll, willkürlich und es könnte auch anders herum gemacht werden. In
            komplexeren Fällen ist das möglicherweise nicht der Fall. Nehmen wir also an, dass sich
            die folgenden Konfigurations-Daten in der Datei
            <filename>/path/to/config.ini</filename> befinden:
        </para>

        <programlisting language="ini"><![CDATA[
; Konfigurations-Daten für die Produktiv-Site
[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

; Konfigurations-Daten für die Staging-Site, erbt von der Produktion
; und überschreibt Werte, wo nötig
[staging : production]
database.params.host     = dev.example.com
database.params.username = devuser
database.params.password = devsecret
]]></programlisting>

        <para>
            Nehmen wir weiterhin an, dass der Anwendungs-Entwickler die Staging-Konfiguration aus
            dieser <acronym>INI</acronym> Datei benötigt. Es ist ein Leichtes, diese Daten zu laden,
            es muss nur die <acronym>INI</acronym> Datei und die Staging-Sektion spezifiziert
            werden:
        </para>

        <programlisting language="php"><![CDATA[
$config = new Zend_Config_Ini('/path/to/config.ini', 'staging');

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

    <note>
        <table id="zend.config.adapters.ini.table">
            <title>Zend_Config_Ini Kontruktor Parameter</title>

            <tgroup cols="2">
                <thead>
                    <row>
                        <entry>Parameter</entry>
                        <entry>Notizen</entry>
                    </row>
                </thead>

                <tbody>
                    <row>
                        <entry><varname>$filename</varname></entry>
                        <entry>Die <acronym>INI</acronym> Datei die geladen wird.</entry>
                    </row>

                    <row>
                        <entry><varname>$section</varname></entry>

                        <entry>
                            Die [section] innerhalb der <acronym>INI</acronym> Datei die geladen
                            wird. Das Setzen dieses Parameters auf <constant>NULL</constant> lädt
                            alle Sektionen. Alternativ, kann ein Array von Sektionsnamen übergeben
                            werden um mehrere Sektionen zu laden.
                        </entry>
                    </row>

                    <row>
                        <entry>
                            <varname>$options</varname> (Default <constant>FALSE</constant>)
                        </entry>

                        <entry>
                            Options Array. Die folgenden Schlüssel werden unterstützt:

                            <itemizedlist>
                                <listitem>
                                    <para>
                                        <emphasis><property>allowModifications</property></emphasis>:
                                        Auf <constant>TRUE</constant> gesetzt erlaubt es
                                        weiterführende Modifikationen der geladenen
                                        Konfigurationsdaten im Speicher. Standardmäßig auf
                                        <constant>NULL</constant> gestellt
                                    </para>
                                </listitem>

                                <listitem>
                                    <para>
                                        <emphasis><property>nestSeparator</property></emphasis>: Auf
                                        das Zeichen zu setzen das als Abschnitts Separator verwendet
                                        wird. Standardmäßig auf "." gestellt
                                    </para>
                                </listitem>
                            </itemizedlist>
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </note>
</sect1>
