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

    <para>
        <classname>Zend_Config_Ini</classname> дает разработчикам возможность
        хранить конфигурационные данные в знакомом большинству
        формате <acronym>INI</acronym> и считывать их в приложении с
        использованием синтаксиса вложенных свойств объекта.
        Формат <acronym>INI</acronym> специализируется на обеспечении иерархии
        конфигурационных данных и наследования между разделами
        конфигурационных данных.
        Иерархии конфигурационных данных поддерживаются посредством
        разделения ключей точкой ("<emphasis>.</emphasis>"). Раздел можно
        расширять или наследовать от другого раздела посредством указания
        имени раздела с двоеточием ("<emphasis>:</emphasis>") и именем
        раздела, от которого наследуются данные, после него.
    </para>

    <note>
        <title>Синтаксический разбор INI-файла</title>

        <para>
            <classname>Zend_Config_Ini</classname> использует функцию
            <acronym>PHP</acronym> <ulink
                url="http://php.net/parse_ini_file"><methodname>parse_ini_file()</methodname></ulink>.
            Пожалуйста, прочитайте документацию, чтобы получить представление об
            особенностях ее поведения, которые распространяются и на
            <classname>Zend_Config_Ini</classname> — например, о том, как обрабатываются
            специальные значения "<constant>TRUE</constant>",
            "<constant>FALSE</constant>", "yes",
            "no" и "<constant>NULL</constant>".
        </para>
    </note>

    <note>
        <title>Разделитель ключей</title>

        <para>
            По умолчанию разделителем ключей является символ точки
            ("<emphasis>.</emphasis>"). Он может быть заменен на любой другой
            путем изменения ключа <emphasis>'nestSeparator'</emphasis> в
            массиве <varname>$options</varname> при создании объекта
            <classname>Zend_Config_Ini</classname>. Например:
        </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</title>

        <para>
            Данный пример демонстрирует использование <classname>Zend_Config_Ini</classname>
            для загрузки конфигурационных данных из файла
            <acronym>INI</acronym>. В этом примере
            используются конфигурационные данные для производственной и
            промежуточной систем. Поскольку конфигурационные данные для
            промежуточной и производственной систем в основном одни и те же,
            то "промежуточный" (staging) раздел наследует от
            "производственного" (production) раздела. В данном случае выбор
            произвольный, т.е. может быть и наоборот — "производственный"
            раздел наследует от "промежуточного", хотя это может не подходить в
            более сложных случаях. Допустим, конфигурационные данные
            находятся в файле <filename>/path/to/config.ini</filename>:
        </para>

        <programlisting language="ini"><![CDATA[
; Конфигурационные данные производственного сайта
[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

; Конфигурационные данные промежуточного сайта наследуются от
; данных производственного и подменяют их при необходимости.
[staging : production]
database.params.host     = dev.example.com
database.params.username = devuser
database.params.password = devsecret
]]></programlisting>

        <para>
            Далее предположим, что разработчику приложения нужны "промежуточные"
            конфигурационные данные из файла <acronym>INI</acronym>. Загрузить
            эти данные, указав файл <acronym>INI</acronym> и нужный раздел,
            довольно просто:
        </para>

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

echo $config->database->params->host;   // выведет "dev.example.com"
echo $config->database->params->dbname; // выведет "dbname"
]]></programlisting>
    </example>

    <note>
    <table id="zend.config.adapters.ini.table">
        <title>Параметры конструктора Zend_Config_Ini</title>
        <tgroup cols="2">
            <thead>
                <row>
                    <entry>Параметр</entry>
                    <entry>Примечание</entry>
                </row>
            </thead>
            <tbody>
                <row>
                    <entry><varname>$filename</varname></entry>
                    <entry><acronym>INI</acronym>-файл для загрузки</entry>
                </row>
                <row>
                    <entry><varname>$section</varname></entry>
                    <entry>
                        Раздел в <acronym>INI</acronym>-файле, который должен
                        быть загружен.
                        Установка этого параметра в <constant>NULL</constant>
                        вызовет загрузку всех разделов.
                        Также может быть передан массив имен разделов
                        для загрузки нескольких разделов.
                    </entry>
                </row>
                <row>
                    <entry><varname>$options = false</varname></entry>
                    <entry>
                        Массив опций. Поддерживаются следующие ключи:
                        <itemizedlist>
                            <listitem>
                                <para>
                                    <emphasis>allowModifications</emphasis>:
                                    Устанавливается в
                                    <constant>TRUE</constant>, чтобы разрешить
                                    последующую модификацию загруженного файла.
                                    По умолчанию установлен в
                                    <constant>FALSE</constant>
                                </para>
                            </listitem>
                            <listitem>
                                <para>
                                    <emphasis>nestSeparator</emphasis>:
                                    Задает символ, используемый в качестве
                                    разделителя узлов. По умолчанию это "."
                                </para>
                            </listitem>
                        </itemizedlist>
                    </entry>
                </row>
            </tbody>
        </tgroup>
    </table>
    </note>
</sect1>
<!--
vim:se ts=4 sw=4 et:
-->
