Ini get all: примеры (PHP)

Полное руководство по работе с ini_get_all в PHP
Раздел: Конфигурация 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 в случае неудачи (например, если указано несуществующее расширение).

Базовые примеры использования

Пример 1: Получение всех настроек с деталями
<?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
        )
)
Пример 2: Получение значений без деталей
<?php
$simple_values = ini_get_all(null, false);
echo $simple_values['max_execution_time'];
?>
30
Пример 3: Получение настроек определенного расширения
<?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

В Python используется модуль sys или configparser для работы с конфигурацией. Прямого аналога нет.

import sys
print(sys.flags) # Некоторые флаги интерпретатора
# Или для чтения .ini файлов:
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
print(config['section']['option'])
JavaScript (Node.js)

Node.js использует объект process или модуль config. Прямого аналога для получения всех настроек интерпретатора не существует.

console.log(process.env); // Переменные окружения
console.log(process.config); // Параметры, с которыми был скомпилирован Node.js
MySQL (SQL)

Для получения системных переменных используются запросы SHOW VARIABLES или SELECT @@variable_name.

SHOW GLOBAL VARIABLES LIKE 'max_connections';
SELECT @@version;

Типичные ошибки

Ошибка 1: Несуществующее расширение
<?php
$result = ini_get_all('non_existent_extension');
var_dump($result);
?>
bool(false)

Функция возвращает false, если расширение не найдено. Рекомендуется проверять результат.

Ошибка 2: Некорректная интерпретация поля access

Поле 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 не претерпела изменений в синтаксисе.

Расширенные примеры

Пример 1: Фильтрация директив по уровню доступа
<?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
)
Пример 2: Сравнение глобальных и локальных значений
<?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
        )
)
Пример 3: Группировка настроек по расширениям (эмуляция)
<?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) . " директив
"; } ?>

PHP ini_get_all function comments

En
Ini get all Gets all configuration options