Ini get all: примеры (PHP)
ini_get_all(?string $extension = null, bool $details = true): array|falseОписание функции ini_get_all
Функция ini_get_all возвращает все зарегистрированные конфигурационные настройки PHP. Она часто используется для отладки, аудита конфигурации сервера или создания административных панелей, где требуется отобразить текущие параметры PHP.
array|false ini_get_all(?string $extension = null, bool $details = true)- extension (string|null): Необязательное имя расширения (например,
"mysqlnd"). Если указано, функция возвращает только директивы, принадлежащие этому расширению. Если равноnull, возвращаются все доступные директивы. - details (bool): Если
true(по умолчанию), функция возвращает массив с детальной информацией по каждой директиве (global_value,local_value,access). Еслиfalse, возвращается только массив текущих (local_value) значений.
Функция возвращает ассоциативный массив с именами директив в качестве ключей или false в случае неудачи (например, если указано несуществующее расширение).
Базовые примеры использования
<?php
$all_settings = ini_get_all();
print_r(array_slice($all_settings, 0, 3)); // Выведем первые 3 для наглядности
?>Array
(
[allow_url_fopen] => Array
(
[global_value] => 1
[local_value] => 1
[access] => 4
)
[allow_url_include] => Array
(
[global_value] => 0
[local_value] => 0
[access] => 4
)
[arg_separator.input] => Array
(
[global_value] => &
[local_value] => &
[access] => 4
)
)<?php
$simple_values = ini_get_all(null, false);
echo $simple_values['max_execution_time'];
?>30<?php
$date_settings = ini_get_all('date');
print_r($date_settings);
?>Array
(
[date.timezone] => Array
(
[global_value] => UTC
[local_value] => UTC
[access] => 7
)
[date.default_latitude] => Array
(
[global_value] => 31.7667
[local_value] => 31.7667
[access] => 7
)
)Похожие функции в PHP
- ini_get(string $option): Получает текущее значение одной конкретной директивы. Эффективнее, когда нужна только одна настройка.
echo ini_get('memory_limit');256M - ini_set(string $option, string $value): Устанавливает новое значение для настройки на время выполнения скрипта.
ini_get_allпоказывает как исходные (global_value), так и текущие (local_value) значения. - get_loaded_extensions() и phpinfo():
get_loaded_extensionsвозвращает список загруженных расширений, что помогает определить аргумент$extensionдляini_get_all.phpinfo()выводит полную информацию о конфигурации в HTML-формате, в то время какini_get_allвозвращает структурированные данные для программной обработки.
Аналоги в других языках
В Python используется модуль sys или configparser для работы с конфигурацией. Прямого аналога нет.
import sys
print(sys.flags) # Некоторые флаги интерпретатора
# Или для чтения .ini файлов:
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
print(config['section']['option'])Node.js использует объект process или модуль config. Прямого аналога для получения всех настроек интерпретатора не существует.
console.log(process.env); // Переменные окружения
console.log(process.config); // Параметры, с которыми был скомпилирован Node.jsДля получения системных переменных используются запросы SHOW VARIABLES или SELECT @@variable_name.
SHOW GLOBAL VARIABLES LIKE 'max_connections';
SELECT @@version;Типичные ошибки
<?php
$result = ini_get_all('non_existent_extension');
var_dump($result);
?>bool(false)Функция возвращает false, если расширение не найдено. Рекомендуется проверять результат.
Поле access — это целое число, представляющее уровень доступа к директиве. Не следует сравнивать его как строку. Его значения определены константами (PHP_INI_*).
<?php
$settings = ini_get_all();
$access = $settings['max_execution_time']['access'];
if ($access === 7) { // PHP_INI_ALL
echo 'Директива может быть изменена в любом месте.';
}
?>Изменения в последних версиях PHP
- PHP 8.0.0: Параметр
extensionстал nullable (?string). Ранее его значение по умолчанию было пустой строкой. Теперь явное указаниеnullвозвращает все директивы. - PHP 8.1.0: Были добавлены новые директивы, связанные с ограничениями памяти и выполнения для новых функций. Сама функция
ini_get_allне претерпела изменений в синтаксисе.
Расширенные примеры
<?php
define('PHP_INI_USER', 1);
define('PHP_INI_PERDIR', 2);
define('PHP_INI_SYSTEM', 4);
define('PHP_INI_ALL', 7);
$all = ini_get_all();
$user_changeable = [];
foreach ($all as $name => $details) {
if ($details['access'] === PHP_INI_ALL || $details['access'] === PHP_INI_USER) {
$user_changeable[$name] = $details['local_value'];
}
}
print_r(array_slice($user_changeable, 0, 5));
?>Array
(
[max_execution_time] => 30
[memory_limit] => 256M
[error_reporting] => 32767
[display_errors] => 1
[display_startup_errors] => 1
)<?php
ini_set('display_errors', '0'); // Меняем локально
$all = ini_get_all();
$diff = [];
foreach ($all as $name => $details) {
if ($details['global_value'] != $details['local_value']) {
$diff[$name] = [
'global' => $details['global_value'],
'local' => $details['local_value']
];
}
}
print_r($diff);
?>Array
(
[display_errors] => Array
(
[global] => 1
[local] => 0
)
)<?php
$loaded_extensions = get_loaded_extensions();
$settings_by_ext = [];
foreach ($loaded_extensions as $ext) {
$ext_settings = ini_get_all($ext);
if ($ext_settings !== false) {
$settings_by_ext[$ext] = array_keys($ext_settings);
}
}
// Вывод расширений, которые имеют свои директивы
foreach ($settings_by_ext as $ext => $directives) {
echo "$ext: " . count($directives) . " директив
";
}
?>