Чтение файлов конфигурации

Задача
Инициализации настроек в программах выполняется с помощью конфигурационных файлов.

Решение
Это делается при помощи функции parse_ini_file():

$config = parse_ini_file('/etc/myapp.ini');

Обсуждение
Функция parse_ini_file() читает файлы конфигурации, структурированные примерно так же, как основной файл PHP, php.ini. Однако функция parse_ini_file() возвращает значения из файла в массив, при этом настройки конфигурационного файла не влияют на конфигурирование PHP.

Например, если функция parse_ini_file() получает файл с таким содержанием:

; physical featureseyes=brown
hair=brown
glasses=yes
; other features
name=Susannah
likes=monkeys,ice cream,reading

Она возвращает следующий массив:

Array
(
[eyes] => brown
[hair] => brown
[glasses] => 1
[name] => Susannah
[likes] => monkeys,ice cream,reading
)

Пустые строки и строки файла конфигурации, начинающиеся с ;, игнорируются. Остальные строки с парами name=value помещаются в массив с именем в качестве ключа и, соответственно, со значением в качестве значения.


Такие слова, как on и yes, в качестве значений возвращаются в виде 1, а такие слова, как off и no, возвращаются в виде пустой строки.

Чтобы проанализировать разделы файла конфигурации, передайте 1 функции parse_ini_file() в качестве второго аргумента. Разделы – это множество заключенных в квадратные скобки слов в файле:

[physical]
eyes=brown
hair=brown
glasses=yes
[other]
name=Susannah
likes=monkeys,ice cream,reading

Если это находится в файле /etc/myapp.ini, то:

$conf = parse_ini_file('/etc/myapp.ini',1);

Помещает следующий массив в переменную $conf:

Array
(
[physical] => Array
(
[eyes] => brown
[hair] => brown
[glasses] => 1
)
[other] => Array
(
[name] => Susannah[likes] => monkeys,ice cream,reading
)
)

Конфигурационный файл может быть также самостоятельным PHP-файлом, загружаемым с помощью require вместо функции parse_ini_file(). Если файл config.php содержит:

// физические данные
$eyes = 'brown';
$hair = 'brown';
$glasses = 'yes';
// другие данные
$name = 'Susannah';
$likes = array('monkeys','ice cream','reading');
?>

Переменные $eyes, $hair, $glasses, $name и $likes можно установить так:

require 'config.php';

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


Переменные, указанные в файле config.php, устанавливаются явным образом, а не внутри массива, как в функции parse_ini_file(). Для простых файлов конфигурации эта методика может не стоить такого дополнительного внимания к синтаксису, но она полезна для внедрения логики в конфигурационный файл:

$time_of_day = (date('a') == 'am') ? 'early' : 'late';
?>

Возможность внедрять логику в конфигурационные файлы стоит того, чтобы создавать файлы с кодом PHP, но полезно также иметь в массиве и все множество переменных файла конфигурации. Новые версии PHP будут снабжены функциональностью, называемой пространства имен, которая позволит иерархически объединять переменные в различные
группы; переменная $hair в двух разных пространствах имен может иметь два разных значения. С помощью пространств имен все значения конфигурационного файла могут быть загружены в пространство имен Config, так чтобы они не пересекались с другими переменными.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Блокировка файла
Выбор случайной строки из файла
Запись в несколько файловых дескрипторов одновременно
Запись в стандартный поток вывода
Непосредственная модификация файла без временной копии

Вернуться в раздел: PHP / 18. Файлы