Где находится php.ini: способы найти конфигурацию PHP

Раздел: PHP -> Конфигурация PHP

Способы найти конфигурационный файл PHP

Наиболее эффективный способ определить местоположение активного файла php.ini - использовать встроенную функцию phpinfo(). Этот метод подходит для любой среды, где запускается веб-скрипт, и не требует доступа к командной строке.

Как найти php.ini, используя функцию phpinfo()?

Создаётся файл с содержимым:

<?php phpinfo(); ?>

Php ниже рекомендуемого значения 512mb (увеличение лимита памяти php)

После открытия файла в браузере (info.php) ищется строка Loaded Configuration File. Справа отображается полный путь к используемому php.ini. Пример вывода:

Loaded Configuration File => /etc/php/8.1/cli/php.ini

найти php ini (поиск файла php.ini)

Проблема: если функция phpinfo() отключена директивой disable_functions, вывод не появится. В этом случае можно воспользоваться альтернативой: ini_get('loaded_config_file') или get_cfg_var('cfg_file_path').

Пример кода:

<?php echo ini_get('loaded_config_file'); ?>

Php ini сервера (настройка php.ini на сервере)

Цель: быстрое определение конфигурации без командной строки. Случаи использования: веб-хостинг, окружения с ограниченным доступом.

Как узнать путь к php.ini через командную строку?

В терминале выполняется команда:

php --ini

Php extension required (требуемое расширение php)

Пример вывода:

Configuration File (php.ini) Path: /etc/php/8.1/cli
Loaded Configuration File:         /etc/php/8.1/cli/php.ini
Scan for additional .ini files in: /etc/php/8.1/cli/conf.d
Additional .ini files parsed:      /etc/php/8.1/cli/conf.d/*.ini

Set limit php (установка лимита в php)

Иногда бинарник PHP недоступен по короткому имени; тогда используется полный путь:

/usr/bin/php8.1 --ini

настройка settings php (настройка файла settings.php)

Проблема: если команда выдаёт «No configuration file found», значит PHP не использует ни один ini-файл (например, в минимальных сборках). Решение: установить пакет с конфигурацией или создать php.ini вручную.

Цель: быстрый поиск для администратора сервера. Случаи: SSH-доступ, скрипты автоматизации.

Как программно определить загруженный ini-файл с помощью php_ini_loaded_file()?

Функция php_ini_loaded_file() возвращает путь к загруженному файлу или false, если конфигурация не загружена.

<?php
echo php_ini_loaded_file();
?>

Php max upload (максимальный размер загрузки в php)

Пример результата:

/etc/php/8.1/cli/php.ini

Php режим (режимы работы php)

Проблема: при вызове из CLI и веб-среды могут возвращаться разные пути, так как используются разные SAPI. Решение: учитывать контекст выполнения.

Цель: получение пути внутри скрипта для дальнейшей обработки (чтения, сравнения).

Как обнаружить все файлы php.ini на сервере?

Поиск по файловой системе с помощью команды find может выявить все копии, включая те, что не используются текущим SAPI.

find / -name 'php.ini' 2>/dev/null

Типичный вывод:

/etc/php/8.1/cli/php.ini
/etc/php/8.1/apache2/php.ini
/etc/php/8.1/fpm/php.ini
/usr/local/lib/php.ini

Проблема: несколько файлов усложняют выбор нужного. Решение: сверяться с выводом php --ini или phpinfo() для конкретного SAPI.

Цель: обзор всех установленных конфигураций. Случаи: настройка окружения, отладка несоответствий.

Где искать php.ini в операционной системе Windows?

В Windows файл php.ini обычно находится в папке установки PHP (например, C:\php) или в %WINDIR%. Можно использовать команды:

dir /s C:\php.ini
dir /s %WINDIR%\php.ini

Также помогает проверка переменной окружения PHPRC:

echo %PHPRC%

Проблема: отсутствие файла php.ini в простых установках – PHP может работать без него. Решение: скопировать php.ini-development или php.ini-production из той же папки.

Цель: настройка окружения под Windows. Случаи: локальная разработка, XAMPP/WAMP.

Как найти php.ini внутри Docker контейнера?

Для контейнеров на основе официальных образов PHP используется команда внутри контейнера:

docker exec <container_name> php --ini

Либо подключение и поиск вручную:

docker exec -it <container_name> bash
find / -name 'php.ini' 2>/dev/null

Проблема: в легковесных образах (alpine) может отсутствовать bash; используется sh. Также конфигурация может быть задана через переменные окружения, и файл не используется. Решение: проверять вывод phpinfo() через веб.

Цель: настройка PHP в микросервисах. Случаи: изменение параметров памяти, времени выполнения.

Расширенные примеры поиска и анализа php.ini

В этом разделе приведены нетривиальные сценарии работы с файлом конфигурации PHP.

Вывод загруженного файла и сканируемых директорий через скрипт

Пример
<?php
echo 'Loaded: ' . php_ini_loaded_file() . "\n";
echo 'Scan dir: ' . php_ini_scanned_files() . "\n";
?>

Пример результата:

Loaded: /etc/php/8.1/cli/php.ini
Scan dir: /etc/php/8.1/cli/conf.d/

Пояснение: функция php_ini_scanned_files() возвращает путь к директории, откуда подгружаются дополнительные ini-файлы.

Получение пути через shell_exec с фильтрацией вывода php -i

Пример
<?php
$output = shell_exec('php -i 2>/dev/null | grep "^Loaded Configuration"');
echo $output ?: 'Конфигурация не обнаружена';
?>

Результат:

Loaded Configuration File => /etc/php/8.1/cli/php.ini

Важно: функция shell_exec может быть отключена. Альтернатива – exec().

Чтение параметров напрямую из php.ini с помощью parse_ini_file

Пример
<?php
$ini_path = php_ini_loaded_file();
if ($ini_path) {
  $config = parse_ini_file($ini_path, true);
  echo 'memory_limit: ' . $config['PHP']['memory_limit'] ?? 'не задан';
} else {
  echo 'Файл не загружен';
}
?>

Результат:

memory_limit: 128M

Метод позволяет программно извлечь любые настройки. Проблема: если php.ini содержит синтаксические ошибки, parse_ini_file возвращает false.

Определение, используется ли один конфиг для CLI и веб-сервера

Пример
<?php
echo 'SAPI: ' . php_sapi_name() . "\n";
echo 'Loaded config: ' . php_ini_loaded_file() . "\n";
?>

Сравнивая вывод при запуске из CLI и из веб-скрипта, можно увидеть разные пути. Например:

SAPI: cgi-fcgi
Loaded config: /etc/php/8.1/fpm/php.ini

Это полезно при отладке расхождений в поведении скриптов.

Поиск всех php.ini в системе и определение версии PHP для каждого

Пример
#!/bin/bash
# Команда для Linux
find / -name 'php.ini' -exec sh -c 'echo "=== {} ==="; head -1 {}; echo' \;

Пример фрагмента вывода:

=== /etc/php/7.4/cli/php.ini ===
[PHP]
=== /etc/php/8.1/cli/php.ini ===
[PHP]

Для более точного анализа можно использовать grep version внутри файла.

Поиск и изменение php.ini внутри Docker контейнера с последующим перезапуском

Пример
# Найти файл
docker exec my-app php --ini | grep 'Loaded Configuration'
# Отредактировать, например, увеличить memory_limit
docker exec -it my-app sed -i 's/memory_limit = 128M/memory_limit = 256M/' /etc/php/8.1/cli/php.ini
# Перезапустить PHP-FPM
docker exec my-app kill -USR2 1

Результат после изменения можно проверить через phpinfo().

Проблема: контейнер может быть временным, изменения потеряются. Решение: использовать volume или собственный Dockerfile с копированием ini.

Сравнение списка загруженных расширений с теми, что включены в php.ini

Пример
<?php
$loaded = get_loaded_extensions();
$phpinfo = shell_exec('php -m 2>/dev/null');
echo 'Загружено ' . count($loaded) . ' расширений';
?>

Результат:

Загружено 72 расширений

Можно дополнить код, чтобы извлечь из php.ini строки extension= и сравнить.

Поиск файла php.ini - comments

En
найти php ini (php)