Чтение конфигураций в PHP. Как осуществить простой разбор ini-файла?

чтение конфигураций в php. как осуществить простой разбор ini-файла?

Принципы составления конфигураций

Зачастую разработчикам требуется хранить настройки своих приложений. Это можно реализовать несколькими способами. Например, созданием обычных массивов в PHP-файлах. Такие файлы подключаются в любом месте скрипта с помощью инструкций include или require. Ваш программный код получает доступ к содержимому конфигурационных массивов и продолжает выполнение.

Многие программисты считают удобным хранение конфигураций в ini-файлах. Именно так задает свои настройки PHP-интерпретатор. Ознакомьтесь с содержимым файла php.ini, чтобы понять принцип его формирования.

Конфигурации, построенные на базе ini-фалов, должны соответствовать ряду требований:

  • Строки, являющиеся комментариями, начинаются со знака «;».
  • Имена опций отделяются от значений символом «=», допускается наличие пробелов между знаком присвоения, значением и именем опции.
  • Значения опций могут быть различного типа: числовые, строковые и логические.
  • Значение должно быть помещено внутрь двойных кавычек, если оно содержит символы отличные от букв и цифр.
  • Конфигурационный файл может разбиваться на сегменты. Для этого в отдельной строке задается конструкция вида «[имя_сегмента]». Все опции, расположенные ниже определения сегмента, при разборе будут отнесены к нему.
  • Опция может являться массивом. Для этого добавьте конструкцию «[]» после её имени. Чтобы поместить в такую опцию несколько значений, нужно осуществить ряд присваиваний.
;пример составления конфигурационного ini-файла 

;определение первого сегмента 
[general]
max-users = 100
users-dir = "/home"
roles-id[admin] = 1
roles-id[clerk] = 150

;определение второго сегмента
[action]
use-actions = true
actions-list[] = create
actions-list[] = delete
actions-list[] = update  

Заметка
Некоторые значения опций, указанных в конфигурационных файлах, обрабатываются специальным образом. Null, off, no и false будут преобразованы в пустую строку, а значения on, yes и true приведены к единице. Однако существуют исключения из этого правила. Вы можете задействовать ряд дополнительных механизмов при разборе конфигурационных ini-файлов с помощью встроенных функций PHP.

Разбор конфигурационных файлов и строк

Хоть ini-файлы и являются простыми, их самостоятельный анализ заметно усложнит вам жизнь. Специально для этих целей в PHP есть две встроенные функции parse_ini_file() и parse_ini_string(). Они осуществляют разбор конфигураций. В случае успеха вы получите массив обработанных опций, иначе вернется логическое значение false.

Обе функции очень схожи по способу применения. Отличие лишь в том, что parse_ini_file() в первом параметре принимает путь до конфигурационного файла, а parse_ini_string() - строку заранее подготовленных опций. Функции имеют второй и третий необязательные параметры. Второй ожидает получить логическое значение. Если он установлен в true, при разборе файла учитывается разбиение на сегменты.

Третий параметр задается с помощью встроенных констант. По умолчанию применяется INI_SCANNER_NORMAL. При таком значении параметра все опции в результирующем массиве будут представлены как строки. Если указать INI_SCANNER_TYPED, значения опций будут приведены к соответствующим типам данных. Обратите внимание на пример, приведенный ниже. В нем осуществляется разбор конфигурации из начала урока. Поместите её в файл simple-config.ini.

//Сканируем содержимое ini-файла, приведенного в начале урока
var_dump(parse_ini_file('simple-config.ini', true, INI_SCANNER_TYPED));

/*Результат:
array (size=2)
    'general' =>
        array (size=3)
            'max-users' => int 100
            'users-dir' => string '/home' (length=5)
            'roles-id' =>
                array (size=2)
                    'admin' => int 1
                    'clerk' => int 150
    'action' =>
        array (size=2)
            'use-actions' => boolean true
            'actions-list' =>
                array (size=3)
                    0 => string 'create' (length=6)
                    1 => string 'delete' (length=6)
                    2 => string 'update' (length=6)
*/

Последние публикации