parse_ini_file
(PHP 4, PHP 5, PHP 7)
parse_ini_file — Обрабатывает конфигурационный файл
Описание
$filename
, bool $process_sections
= false
, int $scanner_mode
= INI_SCANNER_NORMAL
) : array|false
parse_ini_file() загружает
ini-файл, указанный в аргументе filename
,
и возвращает его настройки в виде ассоциативного массива.
Структура ini-файла похожа на структуру php.ini.
Список параметров
-
filename
-
Имя обрабатываемого ini-файла. Если используется относительный путь, он оценивается относительно текущего рабочего каталога, а затем include_path.
-
process_sections
-
Установив параметр
process_sections
вtrue
, вы получаете многомерный массив, который включает как название отдельных настроек, так и секции. По умолчаниюprocess_sections
равенfalse
-
scanner_mode
-
Может принимать следующие значения:
INI_SCANNER_NORMAL
(по умолчанию) илиINI_SCANNER_RAW
. Если указано значениеINI_SCANNER_RAW
, то значения опций не будут обрабатываться.С версии PHP 5.6.1 также можно задать
INI_SCANNER_TYPED
. В этом режиме типы boolean, null и integer будут, по возможности, сохраняться. Строковые значения"true"
,"on"
и"yes"
будут преобразованы вtrue
."false"
,"off"
,"no"
и"none"
вfalse
."null"
преобразуется вnull
. Кроме этого, все числовые строки будут, по возможности, преобразованы к целым числам.
Возвращаемые значения
В случае успеха, настройки возвращаются в виде ассоциативного массива
(array). В случае ошибки возвращается false
.
Примеры
Пример #1 Содержимое sample.ini
; Это пример файла настроек ; Комментарии начинаются с ';', как в php.ini [first_section] one = 1 five = 5 animal = BIRD [second_section] path = "/usr/local/bin" URL = "http://www.example.com/~username" [third_section] phpversion[] = "5.0" phpversion[] = "5.1" phpversion[] = "5.2" phpversion[] = "5.3" urls[svn] = "http://svn.php.net" urls[git] = "http://git.php.net"
Пример #2 Пример использования функции parse_ini_file()
Константы (но не "магические константы" вроде __FILE__
) также могут
обрабатываться в ini-файлах, так что если вы объявите константу
в виде значения для ini-файла до вызова parse_ini_file(),
то константа будет корректно обработана. Только значения опций будут обрабатываться и значение должно быть просто константой.
Например:
<?php
define('BIRD', 'Птица додо');
// Обрабатываем без секций
$ini_array = parse_ini_file("sample.ini");
print_r($ini_array);
// Обрабатываем с секциями
$ini_array = parse_ini_file("sample.ini", true);
print_r($ini_array);
?>
Результатом выполнения данного примера будет что-то подобное:
Array ( [one] => 1 [five] => 5 [animal] => Птица додо [path] => /usr/local/bin [URL] => http://www.example.com/~username [phpversion] => Array ( [0] => 5.0 [1] => 5.1 [2] => 5.2 [3] => 5.3 ) [urls] => Array ( [svn] => http://svn.php.net [git] => http://git.php.net ) ) Array ( [first_section] => Array ( [one] => 1 [five] => 5 [animal] => Птица додо ) [second_section] => Array ( [path] => /usr/local/bin [URL] => http://www.example.com/~username ) [third_section] => Array ( [phpversion] => Array ( [0] => 5.0 [1] => 5.1 [2] => 5.2 [3] => 5.3 ) [urls] => Array ( [svn] => http://svn.php.net [git] => http://git.php.net ) ) )
Пример #3 Обработка файла php.ini функцией parse_ini_file()
<?php
// Простая функция для сравнения результатов
function yesno($expression)
{
return($expression ? 'Да' : 'Нет');
}
// Получаем путь к php.ini с помощью функции php_ini_loaded_file(),
// которая доступна с PHP 5.2.4
$ini_path = php_ini_loaded_file();
// Обрабатываем php.ini
$ini = parse_ini_file($ini_path);
// Выводим и сравниваем значения, учтите, что использование get_cfg_var()
// даст одинаковые результаты для используемых здесь значений parsed (загруженное из файла) и loaded (используемое в данный момент)
echo '(parsed) magic_quotes_gpc = ' . yesno($ini['magic_quotes_gpc']) . PHP_EOL;
echo '(loaded) magic_quotes_gpc = ' . yesno(get_cfg_var('magic_quotes_gpc')) . PHP_EOL;
?>
Результатом выполнения данного примера будет что-то подобное:
(parsed) magic_quotes_gpc = Да (loaded) magic_quotes_gpc = Да
Пример #4 Интерполяция значений
Помимо оценки констант, некоторые символы имеют особое значение в значении ini-файлах.
Кроме того, переменные среды и ранее определенные значения могут быть прочитаны с использованием
синтаксиса ${}
.
; | используется для побитового ИЛИ three = 2|3 ; & используется для побитового AND four = 6&5 ; ^ используется для побитового XOR five = 3^6 ; ~ используется для побитового отрицания negative_two = ~1 ; () используется для группировки seven = (8|7)&(6|5) ; \ используется для экранирования значения. newline_is = "\\n" ; приводит к строке "\ n", а не к символу новой строки. with quotes = "Она сказала \"Именно моя точка зрения\"." ; Результатом является строка с кавычками. path = ${PATH} also_five = ${five}
Результатом выполнения данного примера будет что-то подобное:
(parsed) magic_quotes_gpc = Yes (loaded) magic_quotes_gpc = Yes
Примечания
Замечание:
Эта функция не имеет никакого отношения к файлу php.ini. К моменту выполнения вашего скрипта, он уже обработан. Эта функция может быть использована для загрузки настроек вашего собственного приложения.
Замечание:
Если значение в ini-файле содержит прочие символы, кроме букв и цифр, оно должно заключаться в двойные кавычки (").
Замечание: Существует зарезервированные слова, которые нельзя использовать в качестве ключей в ini-файлах. Такими словами являются:
null
,yes
,no
,true
,false
,on
,off
,none
. Значенияnull
,off
,no
иfalse
преобразуются в""
, а значенияon
,yes
иtrue
в"1"
, но только если не используется режимINI_SCANNER_TYPED
(доступен с PHP 5.6.1). Символы?{}|&~!()^"
не должны использоваться в ключах и иметь какой-либо особый смысл в значениях.
Замечание:
Записи без знака равенства игнорируются. Например, "foo" игнорируется, тогда как "bar =" обрабатывается и добавляется с пустым значением. Например, в MySQL есть опция "no-auto-rehash", устанавливаемая в my.cnf, которая не имеет значения и игнорируется.
Замечание:
ini-файлы обычно обрабатываются веб-серверами как простой текст и, таким образом, по запросу передаются браузерам. Это означает, что в целях безопасности вы должны либо хранить свои ini-файлы вне корневого каталога документов, либо перенастроить веб-сервер, чтобы они не обслуживались. Невыполнение любого из этих требований может создать угрозу безопасности.