(PHP 4, PHP 5, PHP 7, PHP 8)
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()
$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-файлах.
Кроме того, переменные среды и ранее определённые параметры конфигурации (смотрите get_cfg_var())
могут быть прочитаны с использованием синтаксиса ${}.
; | используется для побитового ИЛИ
three = 2|3
; & используется для побитового AND
four = 6&5
; ^ используется для побитового XOR
five = 3^6
; ~ используется для побитового отрицания
negative_two = ~1
; () используется для группировки
seven = (8|7)&(6|5)
; Интерполируйте переменную окружения PATH
path = ${PATH}
; Интерполируйте параметр конфигурации 'memory_limit'
configured_memory_limit = ${memory_limit}
Пример #5 Экранирование символов
Некоторые символы имеют особое значение в строках с двойными кавычками и должны быть экранированы префиксом обратной косой черты.
Прежде всего, это двойная кавычка " в качестве маркера границы и сама обратная косая черта \
(если за ней следует один из специальных символов):
quoted = "Она сказала \"Именно моя точка зрения\"." ; Результатом является строка с кавычками. hint = "Используйте \\\", чтобы избежать двойных кавычек" ; Результат: Используйте \", чтобы избежать двойных кавычек
Для путей, подобных Windows, сделано исключение: можно не экранировать обратную косую черту в конце, если за строкой в кавычках следует разрыв строки:
save_path = "C:\Temp\"
Если нужно экранировать двойные кавычки, за которыми следует перенос строки в многострочном значении, можно использовать конкатенацию значений следующим образом (за одной строкой в двойных кавычках непосредственно следует другая):
long_text = "Lorem \"ipsum\""" dolor" ; Результат: Lorem "ipsum"\n dolor
Другой символ со специальным значением - это $ (знак доллара).
Он должен быть экранирован, если за ним следует открытая фигурная скобка:
code = "\${test}"
Экранирующие символы не поддерживаются в режиме INI_SCANNER_RAW
(в этом режиме все символы обрабатываются "как есть").
Обратите внимание, что синтаксический анализатор ini не поддерживает стандартные последовательности экранирования (\n, \t и т.д.).
При необходимости выполните постобработку результата parse_ini_file()
с помощью функции stripcslashes().
Замечание:
Эта функция не имеет никакого отношения к файлу php.ini. К моменту выполнения вашего скрипта, он уже обработан. Эта функция может быть использована для загрузки настроек вашего собственного приложения.
Замечание:
Если значение в ini-файле содержит прочие символы, кроме букв и цифр, оно должно заключаться в двойные кавычки (").
Замечание: Существует зарезервированные слова, которые нельзя использовать в качестве ключей в ini-файлах. Такими словами являются:
null,yes,no,true,false,on,off,none. Значенияnull,off,noиfalseпреобразуются в"", а значенияon,yesиtrueв"1", но только если не используется режимINI_SCANNER_TYPED. Символы?{}|&~!()^"не должны использоваться в ключах и иметь какой-либо особый смысл в значениях.
Замечание:
Записи без знака равенства игнорируются. Например, "foo" игнорируется, тогда как "bar =" обрабатывается и добавляется с пустым значением. Например, в MySQL есть опция "no-auto-rehash", устанавливаемая в my.cnf, которая не имеет значения и игнорируется.
Замечание:
ini-файлы обычно обрабатываются веб-серверами как простой текст и, таким образом, по запросу передаются браузерам. Это означает, что в целях безопасности вы должны либо хранить свои ini-файлы вне корневого каталога документов, либо перенастроить веб-сервер, чтобы они не обслуживались. Невыполнение любого из этих требований может создать угрозу безопасности.