Как узнать путь к php.ini

Раздел: Установка и конфигурация PHP -> Конфигурационные файлы PHP

Способы определения пути к php.ini

Как найти основной конфигурационный файл php.ini, используемый интерпретатором PHP?

Наиболее надёжным и универсальным способом является вызов функции phpinfo() из скрипта. Этот метод работает как в CLI, так и в веб-версии PHP.

Пример скрипта для определения пути:

<?php
phpinfo();
?>

путь php ini (путь к php.ini)

После запуска скрипта через браузер или консоль (php -f script.php) необходимо найти строку Loaded Configuration File. В этой строке отображается полный путь к загруженному файлу php.ini. Если строка пуста или содержит (none), это означает, что php.ini не загружен (используются значения по умолчанию).

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

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

Типичная ошибка:

При вызове phpinfo() в веб-окружении путь может отличаться от CLI. Необходимо проверять оба окружения, если используется разная конфигурация.

Как определить путь через командную строку, не создавая файла?

Использование команды php --ini в терминале. Эта команда выводит все загруженные конфигурационные файлы, включая директории сканирования.

php --ini

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

Configuration File (php.ini) Path: /etc/php/8.2/cli
Loaded Configuration File:         /etc/php/8.2/cli/php.ini
Scan this dir for additional .ini files: /etc/php/8.2/cli/conf.d
Additional .ini files parsed:      /etc/php/8.2/cli/conf.d/10-opcache.ini, ...

Метод удобен для быстрой проверки без создания файлов. Команда работает только в режиме CLI (из консоли).

Проблема:

Если установлено несколько версий PHP, необходимо указывать полный путь к исполняемому файлу (/usr/bin/php8.2 --ini).

Как получить путь программно внутри скрипта без вывода всей таблицы phpinfo?

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

<?php
$iniPath = php_ini_loaded_file();
if ($iniPath) {
    echo "Путь к php.ini: " . $iniPath;
} else {
    echo "php.ini не загружен, используются настройки по умолчанию.";
}
?>

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

Путь к php.ini: /etc/php/8.2/cli/php.ini

Дополнительно: функция php_ini_scanned_files() возвращает список дополнительных .ini файлов, просканированных из директории, указанной в Scan this dir.

Ошибка:

Функции php_ini_loaded_file() и php_ini_scanned_files() доступны только в PHP 5.2.4 и выше. В более старых версиях их нет.

Как найти php.ini, если доступ к серверу ограничен и не удаётся запустить скрипт?

Проверка переменных окружения, таких как PHP_INI_SCAN_DIR или PHPRC. Переменная PHPRC задаёт каталог, в котором PHP ищет php.ini (по умолчанию).

echo $PHPRC
# или
getenv('PHPRC')

Также можно использовать команду php -i | grep -i "configuration file" для фильтрации вывода phpinfo() в CLI.

php -i | grep -i "configuration file"

Примечание:

Не все среды устанавливают переменные окружения. Кроме того, PHPRC может быть переопределён в конфигурации веб-сервера (например, в Apache через SetEnv).

Как определить путь для разных ОС и окружений (Windows, Linux, macOS)?

На Windows по умолчанию php.ini располагается в директории интерпретатора PHP (например, C:\PHP\php.ini) или в каталоге Windows (C:\Windows\php.ini). Для точного определения требуется запустить phpinfo() или проверить переменную PHPRC.

На Linux и macOS файл обычно лежит в /etc/php/<версия>/<sapi>/php.ini, где SAPI - cli, apache2, fpm и т.д. Также возможна установка в /usr/local/etc/php.ini (при сборке из исходников).

На macOS Homebrew:

brew info php
# покажет путь, например /usr/local/etc/php/8.2/php.ini

Сложность:

Если установлено несколько версий PHP (например, через разные пакеты), необходимо идентифицировать, какой именно исполняемый файл используется (команда which php).

Расширенные примеры определения пути к php.ini

Пример 1: Скрипт для вывода всей информации о конфигурационных файлах

Следующий скрипт выводит загруженный php.ini, директорию сканирования и список всех дополнительных файлов.

Пример
<?php
echo "Loaded Configuration File: " . (php_ini_loaded_file() ?: 'не загружен') . "\n";
echo "Scan directory: " . (ini_get('scan_end') ?: 'по умолчанию') . "\n";
$scanned = php_ini_scanned_files();
if ($scanned) {
    echo "Additional .ini files:\n";
    foreach (explode(",\n", $scanned) as $file) {
        echo " - " . trim($file) . "\n";
    }
} else {
    echo "Дополнительные .ini файлы не найдены.\n";
}
?>

Результат выполнения (пример):

Loaded Configuration File: /etc/php/8.2/cli/php.ini
Scan directory: /etc/php/8.2/cli/conf.d
Additional .ini files:
 - /etc/php/8.2/cli/conf.d/10-opcache.ini
 - /etc/php/8.2/cli/conf.d/20-xdebug.ini
 - /etc/php/8.2/cli/conf.d/30-mysqli.ini

Пример 2: Определение пути через переменные окружения в CLI

Использование php -r 'echo php_ini_loaded_file();' в одну строку без создания файла.

Пример
php -r 'echo "INI: " . (php_ini_loaded_file() ?? "не загружен") . PHP_EOL;'
INI: /etc/php/8.2/cli/php.ini

Альтернативно с помощью php -i | grep 'Loaded Configuration':

Пример
php -i | grep 'Loaded Configuration'
Loaded Configuration File => /etc/php/8.2/cli/php.ini

Пример 3: Сравнение путей для разных SAPI (CLI и веб)

Создадим скрипт, который выводит путь для текущего SAPI и рекомендует проверить другой SAPI.

Пример
<?php
$sapi = php_sapi_name();
$iniPath = php_ini_loaded_file();
echo "Текущий SAPI: $sapi\n";
echo "Загруженный php.ini: " . ($iniPath ?: 'не найден') . "\n";
echo "Совет: Для веб-версии (Apache/FPM) проверьте phpinfo() через браузер.\n";
?>

Если запустить этот скрипт из CLI, результат может указать на /etc/php/8.2/cli/php.ini, а при запуске через веб-сервер - на /etc/php/8.2/apache2/php.ini.

Пример 4: Поиск всех php.ini в системе

В Linux можно использовать команду find для поиска всех экземпляров файла, но следует помнить о правах доступа.

Пример
sudo find / -name 'php.ini' -type f 2>/dev/null

Результат может выдать:

/etc/php/8.2/cli/php.ini
/etc/php/8.2/apache2/php.ini
/etc/php/8.2/fpm/php.ini
/usr/local/etc/php.ini

Важно: не все найденные файлы могут быть загружены активной версией PHP. Необходимо сопоставить с выводом php --ini для конкретного исполняемого файла.

Пример 5: Использование .user.ini файлов (кэширование на уровне директории)

Начиная с PHP 5.3.0, существует поддержка файлов .user.ini, которые применяются для каждой директории. Их местоположение не заменяет основной php.ini, а дополняет его. Путь к основному файлу всё равно определяется через стандартные методы.

Пример
# Проверка, загружен ли .user.ini
php -i | grep 'user_ini.filename'
user_ini.filename => .user.ini

Это означает, что PHP будет искать .user.ini в директории каждого скрипта. Основной php.ini остаётся тем же.

путь к php.ini - comments

En
путь php ini (php)