Обрабатывает конфигурационный файл

# parse_ini_file

(PHP 4, PHP 5, PHP 7, PHP 8)

parse_ini_file — Обрабатывает конфигурационный файл

### Описание

function parse_ini_file(string `$filename`, bool `$process_sections` = `false`, int `$scanner_mode` = `INI_SCANNER_NORMAL`): array|false

parse_ini_file() загружает ini-файл, указанный в аргументе `filename`, и возвращает его настройки в виде ассоциативного массива.

Структура ini-файла похожа на структуру php.ini.

Внимание

Функция не должна использоваться с недоверенными входными данными, за исключением случаев, когда значение параметра `scanner_mode` равно `INI_SCANNER_RAW`, поскольку обработанные данные могут содержать значения конфиденциальных констант, таких как константы, содержащие пароль базы данных.

### Список параметров

`filename`

  Имя обрабатываемого ini-файла. Если используется относительный путь, он оценивается относительно текущего рабочего каталога, а затем include_path.

`process_sections`

  Установив параметр `process_sections` в `true`, вы получаете многомерный массив, который включает как название отдельных настроек, так и секции. По умолчанию `process_sections` равен `false`

`scanner_mode`

  Может принимать следующие значения: `INI_SCANNER_NORMAL` (по умолчанию) или `INI_SCANNER_RAW`. Если указано значение `INI_SCANNER_RAW`, то значения опций не будут обрабатываться.

  С PHP 5.6.1 также доступен режим `INI_SCANNER_TYPED`. В этом режиме типы boolean, null и integer сохраняются, если возможно. Строковые значения `"true"`, `"on"` и `"yes"` преобразуются в `true`, а значения `"false"`, `"off"`, `"no"` и `"none"` — в `false`. Значение `"null"` преобразовывается в `null`. Кроме этого, числовые строки преобразуются в целые числа, если возможно.

### Возвращаемые значения

В случае успешного выполнения, настройки возвращаются в виде ассоциативного массива (array). В случае возникновения ошибки возвращается `false`.

### Примеры

Пример #1 Содержимое sample.ini

    ; Это пример файла настроек
    ; Комментарии начинаются с ';', как в php.ini

    [first_section]
    one = 1
    five = 5
    animal = BIRD

    [second_section]
    path = "/usr/local/bin"
    URL = "http://www.example.com/~username"

    [third_section]
    phpversion[] = "5.0"
    phpversion[] = "5.1"
    phpversion[] = "5.2"
    phpversion[] = "5.3"

    urls[svn] = "http://svn.php.net"
    urls[git] = "http://git.php.net"

Пример #2 Пример использования функции parse_ini_file()

Константы (но не "магические константы" вроде `__FILE__`) также могут обрабатываться в ini-файлах, так что если вы объявите константу в виде значения для ini-файла до вызова parse_ini_file(), то константа будет корректно обработана. Только значения опций будут обрабатываться и значение должно быть просто константой. Например:

    <?php

    define('BIRD', 'Птица додо');

    // Обрабатываем без секций
    $ini_array = parse_ini_file("sample.ini");
    print_r($ini_array);

    // Обрабатываем с секциями
    $ini_array = parse_ini_file("sample.ini", true);
    print_r($ini_array);

    ?>

Вывод приведённого примера будет похож на:

    Array
    (
        [one] => 1
        [five] => 5
        [animal] => Птица додо
        [path] => /usr/local/bin
        [URL] => http://www.example.com/~username
        [phpversion] => Array
            (
                [0] => 5.0
                [1] => 5.1
                [2] => 5.2
                [3] => 5.3
            )

        [urls] => Array
            (
                [svn] => http://svn.php.net
                [git] => http://git.php.net
            )

    )
    Array
    (
        [first_section] => Array
            (
                [one] => 1
                [five] => 5
                [animal] => Птица додо
            )

        [second_section] => Array
            (
                [path] => /usr/local/bin
                [URL] => http://www.example.com/~username
            )

        [third_section] => Array
            (
                [phpversion] => Array
                    (
                        [0] => 5.0
                        [1] => 5.1
                        [2] => 5.2
                        [3] => 5.3
                    )

                [urls] => Array
                    (
                        [svn] => http://svn.php.net
                        [git] => http://git.php.net
                    )

            )

    )

Пример #3 Обработка файла php.ini функцией parse_ini_file()

    <?php
    // Простая функция для сравнения результатов
    function yesno($expression)
    {
        return($expression ? 'Да' : 'Нет');
    }

    // Получаем путь к php.ini с помощью функции php_ini_loaded_file()
    $ini_path = php_ini_loaded_file();

    // Обрабатываем php.ini
    $ini = parse_ini_file($ini_path);

    // Выводим и сравниваем значения, учтите, что использование get_cfg_var()
    // даст одинаковые результаты для используемых здесь значений parsed (загруженное из файла) и loaded (используемое в данный момент)
    echo '(parsed) magic_quotes_gpc = ' . yesno($ini['magic_quotes_gpc']) . PHP_EOL;
    echo '(loaded) magic_quotes_gpc = ' . yesno(get_cfg_var('magic_quotes_gpc')) . PHP_EOL;
    ?>

Вывод приведённого примера будет похож на:

    (parsed) magic_quotes_gpc = Да
    (loaded) magic_quotes_gpc = Да

Пример #4 Интерполяция значений

Помимо оценки констант, некоторые символы имеют особое значение в значении ini-файлах. Кроме того, переменные среды и ранее определённые параметры конфигурации (смотрите get_cfg_var()) могут быть прочитаны с использованием синтаксиса `${}`.

    ; | используется для побитового ИЛИ
    three = 2|3

    ; & используется для побитового AND
    four = 6&5

    ; ^ используется для побитового XOR
    five = 3^6

    ; ~ используется для побитового отрицания
    negative_two = ~1

    ; () используется для группировки
    seven = (8|7)&(6|5)

    ; Интерполируйте переменную окружения PATH
    path = ${PATH}

    ; Интерполируйте параметр конфигурации 'memory_limit'
    configured_memory_limit = ${memory_limit}

Пример #5 Экранирование символов

Некоторые символы имеют особое значение в строках с двойными кавычками и должны быть экранированы префиксом обратной косой черты. Прежде всего, это двойная кавычка `"` в качестве маркера границы и сама обратная косая черта `\` (если за ней следует один из специальных символов):

    quoted = "Она сказала \"Именно моя точка зрения\"." ; Результатом является строка с кавычками.
    hint = "Используйте \\\", чтобы избежать двойных кавычек" ; Результат: Используйте \", чтобы избежать двойных кавычек

Для путей, подобных Windows, сделано исключение: можно не экранировать обратную косую черту в конце, если за строкой в кавычках следует разрыв строки:

    save_path = "C:\Temp\"

Если нужно экранировать двойные кавычки, за которыми следует перенос строки в многострочном значении, можно использовать конкатенацию значений следующим образом (за одной строкой в двойных кавычках непосредственно следует другая):

    long_text = "Lorem \"ipsum\"""
     dolor" ; Результат: Lorem "ipsum"\n dolor

Другой символ со специальным значением - это `$` (знак доллара). Он должен быть экранирован, если за ним следует открытая фигурная скобка:

    code = "\${test}"

Экранирующие символы не поддерживаются в режиме `INI_SCANNER_RAW` (в этом режиме все символы обрабатываются "как есть").

Обратите внимание, что синтаксический анализатор ini не поддерживает стандартные последовательности экранирования (`\n`, `\t` и т.д.). При необходимости выполните постобработку результата parse_ini_file() с помощью функции stripcslashes().

### Примечания

> Замечание:

> Эта функция не имеет никакого отношения к файлу php.ini. К моменту выполнения вашего скрипта, он уже обработан. Эта функция может быть использована для загрузки настроек вашего собственного приложения.

> Замечание:

> Если значение в ini-файле содержит прочие символы, кроме букв и цифр, оно должно заключаться в двойные кавычки (").

> Замечание: Существует зарезервированные слова, которые нельзя использовать в качестве ключей в ini-файлах. Такими словами являются: `null`, `yes`, `no`, `true`, `false`, `on`, `off`, `none`. Значения `null`, `off`, `no` и `false` преобразуются в `""`, а значения `on`, `yes` и `true` в `"1"` , но только если не используется режим `INI_SCANNER_TYPED`. Символы `?{}|&~!()^"` не должны использоваться в ключах и иметь какой-либо особый смысл в значениях.

> Замечание:

> Записи без знака равенства игнорируются. Например, "foo" игнорируется, тогда как "bar =" обрабатывается и добавляется с пустым значением. Например, в MySQL есть опция "no-auto-rehash", устанавливаемая в my.cnf, которая не имеет значения и игнорируется.

> Замечание:

> ini-файлы обычно обрабатываются веб-серверами как простой текст и, таким образом, по запросу передаются браузерам. Это означает, что в целях безопасности вы должны либо хранить свои ini-файлы вне корневого каталога документов, либо перенастроить веб-сервер, чтобы они не обслуживались. Невыполнение любого из этих требований может создать угрозу безопасности.

### Смотрите также

- parse_ini_string() - Разбирает строку конфигурации

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open