Parse ini string: примеры (PHP)

Разбор строк INI с помощью parse_ini_string
Раздел: Файлы конфигурации
parse_ini_string(string $ini_string, bool $process_sections = false, int $scanner_mode = INI_SCANNER_NORMAL): array|false

Функция parse_ini_string

Описание

Функция parse_ini_string разбирает строку в формате INI и возвращает данные в виде ассоциативного массива.

Когда используется

Эта функция применяется, когда необходимо прочитать конфигурационные данные из строки, а не из файла. Она полезна при работе с конфигурациями, хранящимися в базах данных или передаваемыми по сети.

Аргументы
parse_ini_string(string $string, bool $process_sections = false, int $scanner_mode = INI_SCANNER_NORMAL): array|false
  • $string — строка в формате INI для разбора.
  • $process_sections — если установлено в true, функция возвращает многомерный массив, включая имена секций. По умолчанию false.
  • $scanner_mode — может быть одной из констант: INI_SCANNER_NORMAL (по умолчанию), INI_SCANNER_RAW, INI_SCANNER_TYPED. Влияет на обработку значений.

Примеры использования

Простой разбор без секций
$ini_string = "key1 = value1
key2 = value2";
$result = parse_ini_string($ini_string);
print_r($result);
Array
(
    [key1] => value1
    [key2] => value2
)
Разбор с секциями
$ini_string = "[section1]
key1 = value1
[section2]
key2 = value2";
$result = parse_ini_string($ini_string, true);
print_r($result);
Array
(
    [section1] => Array
        (
            [key1] => value1
        )
    [section2] => Array
        (
            [key2] => value2
        )
)
Использование флага INI_SCANNER_RAW
$ini_string = "key = %path%";
$result = parse_ini_string($ini_string, false, INI_SCANNER_RAW);
print_r($result);
Array
(
    [key] => %path%
)
Использование флага INI_SCANNER_TYPED
$ini_string = "boolean_true = true
boolean_false = false
integer = 123
float = 3.14
string = hello";
$result = parse_ini_string($ini_string, false, INI_SCANNER_TYPED);
print_r($result);
Array
(
    [boolean_true] => 1
    [boolean_false] => 
    [integer] => 123
    [float] => 3.14
    [string] => hello
)

Похожие функции в PHP

Функция parse_ini_file разбирает файл в формате INI. Отличие в источнике данных — файл вместо строки. Её предпочтительнее использовать, когда конфигурация хранится в файле.

$result = parse_ini_file('config.ini', true);
print_r($result);
Другие способы

Для работы с конфигурациями также применяют функции для обработки JSON, XML или YAML, если данные хранятся в этих форматах. Однако для формата INI parse_ini_string и parse_ini_file остаются основными.

Типичные ошибки

Неправильный формат строки

Если строка не соответствует формату INI, функция вернет false.

$ini_string = "invalid content";
$result = parse_ini_string($ini_string);
var_dump($result);
bool(false)
Использование несуществующих флагов

Указание неверного значения для scanner_mode может привести к неожиданным результатам. В PHP 8, вероятно, будет выведено предупреждение.

$ini_string = "key = value";
$result = parse_ini_string($ini_string, false, 9999);
var_dump($result);
Warning: parse_ini_string(): Unknown scanner mode in ...

Изменения в последних версиях PHP

PHP 7.0

Добавлена поддержка константы INI_SCANNER_TYPED для сканера, которая преобразует значения к соответствующим типам.

PHP 8.0

В PHP 8 не было значительных изменений в функции parse_ini_string, но были общие улучшения системы типов и обработки ошибок.

Расширенные примеры

Разбор вложенных структур

Функция не поддерживает вложенные секции, но можно использовать точки в именах ключей для имитации иерархии.

Пример php
$ini_string = "[section]\ndatabase.host = localhost\ndatabase.port = 3306\napp.name = Test";
$result = parse_ini_string($ini_string, true);
print_r($result);
Array
(
    [section] => Array
        (
            [database.host] => localhost
            [database.port] => 3306
            [app.name] => Test
        )
)
Работа с сырыми значениями

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

Пример php
$ini_string = "path = %HOME%\nregex = /.*/\nquoted = \"value\"";
$result_raw = parse_ini_string($ini_string, false, INI_SCANNER_RAW);
$result_normal = parse_ini_string($ini_string, false, INI_SCANNER_NORMAL);
print_r($result_raw);
print_r($result_normal);
Array
(
    [path] => %HOME%
    [regex] => /.*/
    [quoted] => "value"
)
Array
(
    [path] => %HOME%
    [regex] => /.*/
    [quoted] => value
)
Типизированные значения с INI_SCANNER_TYPED

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

Пример php
$ini_string = "bool1 = on\nbool2 = off\nint = 42\nfloat = 3.14e-10";
$result = parse_ini_string($ini_string, false, INI_SCANNER_TYPED);
var_dump($result);
array(4) {
  ["bool1"]=>
  bool(true)
  ["bool2"]=>
  bool(false)
  ["int"]=>
  int(42)
  ["float"]=>
  float(3.14E-10)
}
Обработка комментариев и пробелов

Функция игнорирует комментарии, начинающиеся с ; или #, а также пробелы вокруг значений.

Пример php
$ini_string = "; комментарий\nkey1 = value1  ; еще комментарий\n# другой комментарий\nkey2 = value2";
$result = parse_ini_string($ini_string);
print_r($result);
Array
(
    [key1] => value1
    [key2] => value2
)

Альтернативы в других языках программирования

Parse ini string в Python

В Python для разбора INI используется модуль configparser. Он предлагает более богатый функционал, включая валидацию и интерполяцию значений.

import configparser
config = configparser.ConfigParser()
config.read_string("[section]\nkey = value")
print(config['section']['key'])
value

Parse ini string в Javascript

В JavaScript нет встроенной функции для разбора INI, но существуют библиотеки, например, ini для Node.js.

const ini = require('ini');
const config = ini.parse('key = value');
console.log(config);
{ key: 'value' }

Parse ini string в MySQL

В MySQL отсутствует прямая функция для разбора строк INI. Однако можно применять строковые функции для простых случаев или читать файлы через LOAD DATA INFILE, но это не является полным аналогом.

PHP parse_ini_string function comments

En
Parse ini string Parse a configuration string