Настройки PHP не обнаружены: что делать при отсутствии файла php.ini

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

Ошибка «Не найдены настройки PHP»: причины и решения

Как определить, какой файл php.ini используется в системе?

Наиболее эффективный способ устранения ошибки - выяснить точный путь к конфигурационному файлу, который PHP ожидает найти. Это можно сделать с помощью встроенной команды php --ini (или php -i | grep -i 'php.ini'). Она выводит список загруженных конфигурационных файлов и их расположение.

php --ini

Settings php not found (не найдены настройки php)

Пример вывода (если файлы найдены):

Configuration File (php.ini) Path: /etc/php/8.1/cli
Loaded Configuration File:         /etc/php/8.1/cli/php.ini
Scan this dir for additional .ini files: /etc/php/8.1/cli/conf.d

Если в строке Loaded Configuration File указано (none) или отсутствует сам блок, значит PHP не может загрузить php.ini.

Типичная ошибка: при использовании разных версий PHP (например, CLI и Apache/FPM) пути к php.ini различаются. Команда php --ini показывает только настройки для CLI. Для веб-сервера следует выполнить аналогичную проверку из скрипта через phpinfo().

Решение: создать PHP-файл с содержимым <?php phpinfo(); ?> и открыть его в браузере. В разделе Configuration File (php.ini) Path отобразится путь, используемый веб-сервером.

Как восстановить или создать файл php.ini из образца?

Если файл php.ini отсутствует, его можно скопировать из дистрибутива PHP. В большинстве систем образцы находятся в той же директории, что и сам PHP, или в /etc/php/<версия>/.

# Скопировать образец для разработки
cp /usr/local/php/lib/php.ini-development /usr/local/php/lib/php.ini

# Или для продакшена (более строгие настройки)
cp /usr/local/php/lib/php.ini-production /usr/local/php/lib/php.ini

Путь к образцам может отличаться. Найти их можно командой find / -name 'php.ini-development' 2>/dev/null.

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

Совет: перед редактированием сохранить резервную копию оригинального образца.

Как принудительно указать путь к php.ini через аргумент -c?

Если скрипт запускается из командной строки, можно временно задать нужный конфигурационный файл с помощью флага -c.

php -c /etc/php/8.1/cli/php.ini script.php

Этот метод полезен при тестировании разных версий конфигурации или если основной файл повреждён.

Важно: флаг -c влияет только на тот запуск, где он указан. Для постоянного решения необходимо изменить окружение.

Как настроить переменную окружения PHPRC?

PHP может загружать конфигурацию из директории, указанной в переменной PHPRC. Установка этой переменной помогает явно задать путь к php.ini.

# Временно (для текущего сеанса)
export PHPRC=/etc/php/8.1/cli

# Постоянно - добавить в ~/.bashrc или /etc/profile
echo 'export PHPRC=/etc/php/8.1/cli' >> ~/.bashrc
source ~/.bashrc

Нюанс: переменная PHPRC не переопределяет параметр --ini, если он указан явно. Также на веб-серверах (Apache, Nginx) PHPRC часто игнорируется в пользу директивы PHPIniDir или конфигурации пула.

Как исправить конфликт версий PHP (CLI и веб-сервер)?

Ошибка может возникать, если CLI-версия PHP использует один php.ini, а веб-сервер (например, Apache mod_php или PHP-FPM) - другой. Необходимо синхронизировать настройки.

# Узнать версию и пути для веб-сервера
# Для Apache: <IfModule mod_php.c>
#    PHPIniDir /etc/php/8.1/apache2
# </IfModule>

# Для PHP-FPM: проверить файл пула /etc/php/8.1/fpm/pool.d/www.conf
# Директива 'php_admin_value[error_log]' и др.

Типичная ситуация: после обновления PHP остаётся старый php.ini. Следует проверить, что все используемые SAPI указывают на актуальный файл.

Расширенные примеры работы с настройками PHP

Пример
# 1. Полный вывод информации о конфигурации PHP
php -i | head -30
phpinfo()
PHP Version => 8.1.12
System => Linux server 5.15.0-91-generic #101-Ubuntu SMP ...
Build Date => Nov 29 2022 14:15:20
Server API => Command Line Interface
Virtual Directory Support => disabled
Configuration File (php.ini) Path => /etc/php/8.1/cli
Loaded Configuration File => /etc/php/8.1/cli/php.ini
Scan this dir for additional .ini files => /etc/php/8.1/cli/conf.d
Additional .ini files parsed => /etc/php/8.1/cli/conf.d/...
...
Пример
# 2. Создание php.ini из образца для конкретной версии
# Если PHP собран вручную и установлен в /usr/local/php8.2/
cp /usr/local/php8.2/lib/php.ini-production /usr/local/php8.2/lib/php.ini
# Убедиться, что файл читается:
php --ini | grep 'Loaded Configuration'
# Если по-прежнему (none), возможно, нужно указать директорию через PHPRC:
export PHPRC=/usr/local/php8.2/lib
php --ini
Loaded Configuration File => /usr/local/php8.2/lib/php.ini
Пример
# 3. Использование -c при запуске скрипта с альтернативной конфигурацией
php -c /opt/phpconfig/custom.ini -d 'display_errors=1' test.php
# -d позволяет переопределить отдельные директивы без изменения файла
Пример
# 4. Поиск всех php.ini в системе
find / -name 'php.ini' -type f 2>/dev/null
# Результат, например:
# /etc/php/7.4/cli/php.ini
# /etc/php/7.4/apache2/php.ini
# /etc/php/8.1/cli/php.ini
# /etc/php/8.1/fpm/php.ini
Пример
# 5. Проверка загрузки дополнительных .ini файлов
# Директива 'scan this dir' может указывать на каталог conf.d
ls -la /etc/php/8.1/cli/conf.d/
# Пример содержимого:
# 10-opcache.ini
# 20-bcmath.ini
# ...
Пример
# 6. Принудительное игнорирование php.ini (полезно для тестов)
php -n script.php  # -n означает 'no configuration'
# Результат: все расширения отключены, настройки по умолчанию

Не найдены настройки PHP - comments

En
Settings php not found (php)