Avatar ·

Где находится файл php.ini в Linux и как его найти?

Всем привет! Я начинающий PHP-разработчик, перешел с Windows на Linux (Ubuntu 20.04). На Windows я привык, что php.ini лежит в папке с PHP, и я легко его находил. Но в Linux я в полной растерянности. Я установил PHP через `apt install php`, но не могу понять, куда он положил конфиг. Пытался изменить `upload_max_filesize` для загрузки файлов на сервере, но не могу найти файл. Вот мой простой скрипт для проверки: ```php ``` Я запускаю его через веб-сервер (Apache + PHP-FPM) и вижу в выводе `phpinfo()`, что `upload_max_filesize = 2M`. Я хочу увеличить до 20M, но не знаю, в каком файле менять. Пробовал искать через терминал: `find / -name "php.ini" 2>/dev/null` — находит аж 5 файлов! Какой из них правильный? Почему их несколько? И как понять, какой из них использует мой сайт? Объясните, пожалуйста, для новичка, как разобраться с этой системой конфигов в Linux. <<>>

Как найти правильный php.ini в Linux

Привет! Это классическая проблема начинающих Linux-разработчиков. Система конфигов PHP в Linux отличается от Windows, но на самом деле всё логично. Давайте разберёмся по шагам.

Шаг 1: Узнайте, какой файл использует ваш PHP

Самый надёжный способ — создать PHP-скрипт и посмотреть путь прямо из phpinfo():

<?php
phpinfo();
?>

Запустите его через браузер (если речь о веб-версии) или через консоль. Найдите в выводе строку Loaded Configuration File — это и есть путь к вашему активному php.ini. Обычно это что-то вроде:

  • /etc/php/8.1/apache2/php.ini — для Apache mod_php
  • /etc/php/8.1/fpm/php.ini — для PHP-FPM
  • /etc/php/8.1/cli/php.ini — для командной строки (CLI)

Обратите внимание на версию PHP (8.1 в примере) и на SAPI (серверный API).

Шаг 2: Почему файлов несколько?

Linux-дистрибутивы (Ubuntu, Debian) хранят отдельные конфиги для разных режимов работы PHP:

  • CLI — когда вы запускаете PHP из терминала
  • Apache — когда PHP работает как модуль Apache
  • FPM — когда используется PHP-FPM (часто с Nginx или Apache через прокси)

Каждый режим может иметь свои настройки. Например, для CLI можно разрешить больше памяти, чем для веб-версии.

Шаг 3: Как изменить параметр?

Допустим, ваш активный файл — /etc/php/8.1/fpm/php.ini. Откройте его с правами root:

sudo nano /etc/php/8.1/fpm/php.ini

Найдите строку upload_max_filesize (можно нажать Ctrl+W в nano) и измените:

upload_max_filesize = 20M
post_max_size = 25M  
max_execution_time = 300

Важно: После изменения нужно перезапустить PHP-FPM:

sudo systemctl restart php8.1-fpm

Если используете Apache mod_php — перезапускайте Apache:

sudo systemctl restart apache2

Шаг 4: Альтернативный способ — через ini-директории

В Linux можно не трогать основной php.ini, а создать свой файл в папке /etc/php/8.1/fpm/conf.d/ или /etc/php/8.1/apache2/conf.d/. Создайте файл, например my-settings.ini:

sudo nano /etc/php/8.1/fpm/conf.d/99-my-settings.ini

И запишите туда только нужные изменения:

upload_max_filesize = 20M
post_max_size = 25M

Это удобно — не нужно копаться в огромном основном файле, и при обновлении PHP ваши настройки сохранятся.

Шаг 5: Проверка результата

Снова запустите phpinfo() и убедитесь, что параметры изменились. Если нет — проверьте:

  • Правильный ли файл вы редактировали (смотрите Loaded Configuration File)
  • Перезапустили ли нужный сервис
  • Нет ли конфликта с настройками в .htaccess или в коде (ini_set)

Бонус: быстрая команда поиска

Вместо ручного поиска можно использовать:

php -i | grep "Loaded Configuration File"

Для CLI-версии. А для веб-версии — просто посмотрите в phpinfo().

<<>>

Как понять, какой php.ini использует ваш проект

Коллега выше всё правильно объяснил, но добавлю важный момент: если у вас несколько проектов на одном сервере, они могут использовать разные версии PHP или разные конфиги через пулы FPM.

Способ через PHP-скрипт

Просто добавьте в ваш проект такой код и запустите его в браузере:

<?php
echo "Текущий php.ini: " . php_ini_loaded_file() . "<br>";
echo "Директория сканирования: " . php_ini_scanned_files();
?>

Функция php_ini_loaded_file() покажет точный путь к активному файлу. А php_ini_scanned_files() — все дополнительные ini-файлы, которые подгружаются дополнительно.

Для консольных скриптов

Если вы запускаете скрипт из терминала, используйте:

php -r "echo php_ini_loaded_file();"

Или просто:

php --ini

Эта команда покажет и основной файл, и дополнительные директории. Очень удобно для быстрой диагностики.

Важный совет

Если вы используете Docker или виртуальные окружения — php.ini может лежать вообще в другом месте, например внутри контейнера. В таких случаях смотрите в документацию образа или используйте docker exec для проверки.