Parse ini string: примеры (PHP)
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_string = "key = %path%";
$result = parse_ini_string($ini_string, false, INI_SCANNER_RAW);
print_r($result);Array
(
[key] => %path%
)$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
Добавлена поддержка константы INI_SCANNER_TYPED для сканера, которая преобразует значения к соответствующим типам.
В PHP 8 не было значительных изменений в функции parse_ini_string, но были общие улучшения системы типов и обработки ошибок.
Расширенные примеры
Функция не поддерживает вложенные секции, но можно использовать точки в именах ключей для имитации иерархии.
$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 полезен, когда необходимо получить значения без обработки специальных символов.
$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_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)
}Функция игнорирует комментарии, начинающиеся с ; или #, а также пробелы вокруг значений.
$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, но это не является полным аналогом.