Get cfg var: примеры (PHP)

Использование get_cfg_var в PHP 8 для работы с конфигурацией
Раздел: Конфигурация PHP
get_cfg_var(string $option): string|array|false
Описание функции get_cfg_var

Функция get_cfg_var возвращает значение указанной опции конфигурации PHP. В отличие от ini_get, она извлекает значение, установленное непосредственно в основном файле конфигурации php.ini, игнорируя значения, переопределенные во время выполнения с помощью ini_set.

Когда используется функция

Функция применяется, когда необходимо узнать исходное значение настройки из php.ini. Это полезно для отладки, аудита безопасности или построения логики, зависящей от первоначальной конфигурации среды.

Аргументы функции

Функция принимает один аргумент:

  • option (string) - имя запрашиваемой опции конфигурации. Если передана пустая строка, функция возвращает массив всех опций конфигурации.

Возвращает значение опции в виде строки или массива, либо false, если опция не существует.

Короткие примеры использования
Получение значения конкретной опции
<?
$memory_limit = get_cfg_var('memory_limit');
echo 'Значение memory_limit из php.ini: ';
var_dump($memory_limit);
?>
Значение memory_limit из php.ini: string(4) "256M"
Попытка получить несуществующую опцию
<?
$result = get_cfg_var('non_existent_option');
var_dump($result);
?>
bool(false)
Получение всех опций конфигурации
<?
$all_options = get_cfg_var('');
// Выведем только первые 5 опций для примера
$sample = array_slice($all_options, 0, 5);
foreach($sample as $key => $value) {
    echo "$key: ";
    var_dump($value);
    echo "
"; } ?>
engine: string(1) "1"
short_open_tag: string(1) "1"
precision: string(2) "14"
output_buffering: string(1) "0"
zlib.output_compression: string(1) "0"
Похожие функции в PHP

В PHP существует несколько функций для работы с конфигурацией:

  • ini_get(string $option) - возвращает текущее значение опции, которое может быть изменено с помощью ini_set во время выполнения скрипта. Используется чаще для получения актуального значения в рамках скрипта.
  • ini_get_all(?string $extension = null, bool $details = true) - возвращает все зарегистрированные опции конфигурации в виде массива. При $details = true предоставляет дополнительную информацию (глобальное значение, локальное значение, доступность изменения).
  • phpinfo(int $flags = INFO_ALL) - выводит обширную информацию о конфигурации PHP. Используется для получения полного отчета о среде.

get_cfg_var предпочтительнее, когда требуется именно первоначальное значение из php.ini, а не то, которое может быть временно изменено в скрипте.

Аналоги в других языках
Python (модуль configparser)

В Python для чтения конфигурационных файлов, подобных php.ini, используется модуль configparser. Он обеспечивает более структурированный доступ к секциям и значениям.

import configparser
config = configparser.ConfigParser()
config.read('php.ini')
try:
    value = config.get('PHP', 'memory_limit')
    print(f"memory_limit из php.ini: {value}")
except (configparser.NoSectionError, configparser.NoOptionError):
    print("Опция не найдена")
memory_limit из php.ini: 256M
JavaScript (Node.js - process.env)

В Node.js переменные окружения доступны через объект process.env. Это аналог внешней конфигурации среды, но не файла.

// Установка переменной окружения (обычно вне кода)
// export NODE_ENV="production"
console.log("NODE_ENV:", process.env.NODE_ENV || "не установлен");
NODE_ENV: production
MySQL (SHOW VARIABLES)

В MySQL для получения системных переменных используется запрос SHOW VARIABLES.

-- SQL запрос
SHOW VARIABLES LIKE 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
Типичные ошибки
Ожидание значения из php.ini при его переопределении

Распространенная ошибка - путаница между get_cfg_var и ini_get.

<?
ini_set('display_errors', '0');
$cfg_val = get_cfg_var('display_errors'); // Значение из php.ini
$ini_val = ini_get('display_errors');     // Текущее значение (0)
echo "get_cfg_var: "; var_dump($cfg_val); echo "
"; echo "ini_get: "; var_dump($ini_val); ?>
get_cfg_var: string(1) "1"
ini_get: string(1) "0"
Неправильная обработка возвращаемого значения false

Не все опции существуют, поэтому результат нужно проверять.

<?
$value = get_cfg_var('session.gc_maxlifetime');
// Ошибочный подход:
echo "Значение: " . $value; // Предупреждение, если false
// Правильный подход:
if ($value !== false) {
    echo "Значение: $value";
} else {
    echo "Опция не найдена";
}
?>
Опция не найдена (если опция не задана в основном php.ini)
Изменения в последних версиях PHP

В PHP 8.0.0 поведение функции было уточнено. Теперь функция всегда возвращает false, если запрашиваемая опция не существует. В более ранних версиях поведение для несуществующих опций могло быть непоследовательным (например, возвращалась пустая строка). Это изменение делает проверку ошибок более надежной.

<?
// Поведение в PHP 8+
$val = get_cfg_var('несуществующая_опция');
var_dump($val);
?>
bool(false)
Расширенные примеры использования
Определение пути к основному файлу php.ini

Специальная опция cfg_file_path содержит путь к загруженному файлу конфигурации.

Пример php
<?
$configFilePath = get_cfg_var('cfg_file_path');
echo "Основной файл конфигурации: $configFilePath";
?>
Основной файл конфигурации: /etc/php/8.2/cli/php.ini
Сравнение значений из php.ini и текущих значений

Полезно для отладки, чтобы понять, какие настройки были переопределены.

Пример php
<?
$option = 'error_reporting';
$original = get_cfg_var($option);
$current = ini_get($option);
if ($original !== false && $original != $current) {
    echo "Опция '$option' была изменена во время выполнения.
"; echo "Исходное значение: $original
"; echo "Текущее значение: $current"; } ?>
Проверка, доступна ли опция для изменения

Используя ini_get_all с детализацией, можно узнать, какие опции были изначально заданы в php.ini.

Пример php
<?
$allOptions = ini_get_all(null, true);
$option = 'max_execution_time';
if (isset($allOptions[$option])) {
    $globalValue = $allOptions[$option]['global_value'];
    $localValue = $allOptions[$option]['local_value'];
    echo "Глобальное значение (из php.ini): $globalValue
"; echo "Локальное значение (текущее): $localValue
"; // Сравним с get_cfg_var $cfgValue = get_cfg_var($option); echo "get_cfg_var: $cfgValue"; } ?>
Безопасность: проверка отключенных опасных функций
Пример php
<?
$disable_functions = get_cfg_var('disable_functions');
if ($disable_functions) {
    $disabledList = explode(',', $disable_functions);
    $dangerous = ['system', 'exec', 'shell_exec'];
    $intersection = array_intersect($dangerous, $disabledList);
    if (!empty($intersection)) {
        echo "Следующие опасные функции отключены в php.ini: " . implode(', ', $intersection);
    }
}
?>
Условная логика на основе исходной конфигурации
Пример php
<?
// Если в php.ini включен режим разработчика, логируем подробно
$original_display_errors = get_cfg_var('display_errors');
if ($original_display_errors == '1' || $original_display_errors == 'On') {
    define('DEBUG_MODE', true);
    error_reporting(E_ALL);
} else {
    define('DEBUG_MODE', false);
    error_reporting(0);
}
echo "Режим отладки: " . (DEBUG_MODE ? 'Включен' : 'Выключен');
?>

PHP get_cfg_var function comments

En
Get cfg var Gets the value of a PHP configuration option