Get cfg var: примеры (PHP)
get_cfg_var(string $option): string|array|falseФункция 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 существует несколько функций для работы с конфигурацией:
- 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 для чтения конфигурационных файлов, подобных 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
В Node.js переменные окружения доступны через объект process.env. Это аналог внешней конфигурации среды, но не файла.
// Установка переменной окружения (обычно вне кода)
// export NODE_ENV="production"
console.log("NODE_ENV:", process.env.NODE_ENV || "не установлен");NODE_ENV: production
В MySQL для получения системных переменных используется запрос SHOW VARIABLES.
-- SQL запрос
SHOW VARIABLES LIKE 'max_connections';+-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 151 | +-----------------+-------+
Распространенная ошибка - путаница между 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"
Не все опции существуют, поэтому результат нужно проверять.
<?
$value = get_cfg_var('session.gc_maxlifetime');
// Ошибочный подход:
echo "Значение: " . $value; // Предупреждение, если false
// Правильный подход:
if ($value !== false) {
echo "Значение: $value";
} else {
echo "Опция не найдена";
}
?>Опция не найдена (если опция не задана в основном php.ini)
В PHP 8.0.0 поведение функции было уточнено. Теперь функция всегда возвращает false, если запрашиваемая опция не существует. В более ранних версиях поведение для несуществующих опций могло быть непоследовательным (например, возвращалась пустая строка). Это изменение делает проверку ошибок более надежной.
<?
// Поведение в PHP 8+
$val = get_cfg_var('несуществующая_опция');
var_dump($val);
?>bool(false)
Специальная опция cfg_file_path содержит путь к загруженному файлу конфигурации.
<?
$configFilePath = get_cfg_var('cfg_file_path');
echo "Основной файл конфигурации: $configFilePath";
?>Основной файл конфигурации: /etc/php/8.2/cli/php.ini
Полезно для отладки, чтобы понять, какие настройки были переопределены.
<?
$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.
<?
$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";
}
?><?
$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.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 ? 'Включен' : 'Выключен');
?>