Настройки PHP не обнаружены: что делать при отсутствии файла php.ini
Ошибка «Не найдены настройки PHP»: причины и решения
Как определить, какой файл php.ini используется в системе?
Наиболее эффективный способ устранения ошибки - выяснить точный путь к конфигурационному файлу, который PHP ожидает найти. Это можно сделать с помощью встроенной команды php --ini (или php -i | grep -i 'php.ini'). Она выводит список загруженных конфигурационных файлов и их расположение.
php --iniSettings 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'
# Результат: все расширения отключены, настройки по умолчанию