Задача
Инициализации настроек в программах выполняется с помощью конфигурационных файлов.
Решение
Это делается при помощи функции 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 содержит:
<?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, включая начальный тег <?php и заключительный тег ?>. Переменные, указанные в файле config.php, устанавливаются явным образом, а не внутри массива, как в функции parse_ini_file(). Для простых файлов конфигурации эта методика может не стоить такого дополнительного внимания к синтаксису, но она полезна для внедрения логики в конфигурационный файл:
<?php
$time_of_day = (date('a') == 'am') ? 'early' : 'late';
?>
Возможность внедрять логику в конфигурационные файлы стоит того, чтобы создавать файлы с кодом PHP, но полезно также иметь в массиве и все множество переменных файла конфигурации. Новые версии PHP будут снабжены функциональностью, называемой пространства имен, которая позволит иерархически объединять переменные в различные
группы; переменная $hair в двух разных пространствах имен может иметь два разных значения. С помощью пространств имен все значения конфигурационного файла могут быть загружены в пространство имен Config, так чтобы они не пересекались с другими переменными.