php.ini: где находится и как изменить параметры PHP
Коротко
Где находится php.ini, точно показывает команда php --ini в терминале или строка "Loaded Configuration File" в выводе phpinfo(). В Windows файл обычно лежит рядом с php.exe (в XAMPP это C:\xampp\php\php.ini), в Ubuntu у каждой версии и режима свой файл: /etc/php/8.3/fpm/php.ini для сайта и /etc/php/8.3/cli/php.ini для консоли. После правки параметров вроде memory_limit или upload_max_filesize перезапустите PHP-FPM или Apache, иначе изменения не вступят в силу.
Содержание
- Как найти php.ini, который реально используется
- Где лежит php.ini в Windows
- Где лежит php.ini в Ubuntu и Debian
- php.ini на хостинге
- Главные параметры php.ini
- Как увеличить memory_limit
- Загрузка больших файлов
- ini_set: изменение настроек из кода
- Чтение и запись своих ini-файлов в PHP
- Почему изменения в php.ini не применяются
Как найти php.ini, который реально используется
Файлов php.ini на одном компьютере бывает несколько: для консоли и для веб-сервера, для разных версий PHP, плюс заготовки php.ini-development и php.ini-production. Править нужно тот, который загружает нужный вам PHP, поэтому начните с проверки.
- Откройте терминал и выполните
php --ini. - Посмотрите строку "Loaded Configuration File": это путь к основному php.ini консольного PHP.
- Строка "Scan for additional .ini files in" показывает папку с дополнительными файлами настроек.

Если вместо пути написано (none), php.ini не загружен вовсе и PHP работает на настройках по умолчанию. Скопируйте рядом с php.exe файл php.ini-development (для локальной разработки) или php.ini-production (для сервера) и переименуйте копию в php.ini.
Найти путь из консоли можно и короче:
# Linux и macOS
php -i | grep "Loaded Configuration File"
# Windows (cmd или PowerShell)
php -i | findstr "Loaded Configuration File"
Для сайта консольная команда может соврать: веб-сервер часто использует другой файл. Надёжный способ - временный PHP-файл с phpinfo() в корне сайта: в таблице ищите те же строки "Loaded Configuration File" и "Scan this dir for additional .ini files". После проверки файл сразу удалите, он раскрывает настройки сервера. Там же в первой строке видна версия, подробнее о ней в статье как узнать версию PHP.

Где лежит php.ini в Windows
| Установка | Путь к php.ini | Как применить изменения |
|---|---|---|
| XAMPP | C:\xampp\php\php.ini | Перезапуск Apache в XAMPP Control Panel |
| Open Server Panel 6 | Папка config панели, отдельно для каждого модуля PHP | Перезапуск модуля или панели |
| Отдельная установка PHP | Рядом с php.exe, например C:\php\php.ini | Перезапуск веб-сервера или новый терминал |
| Laragon | C:\laragon\bin\php\php-8.x\php.ini | Кнопка "Reload" в Laragon |
В XAMPP файл удобно открыть прямо из панели: в строке Apache нажмите "Config" и выберите "PHP (php.ini)". Панель откроет именно тот файл, который загружает Apache.

В Open Server Panel 6 настройки PHP хранятся отдельно для каждой версии модуля, а сам файл проще всего открыть через меню панели в трее, раздел с конфигурацией модулей. Правка файла внутри папки модуля может быть перезаписана при обновлении, поэтому пользуйтесь тем путём, который показывает панель. Подробнее о структуре сборок в статьях про установку XAMPP и Open Server Panel.
Где лежит php.ini в Ubuntu и Debian
В Debian и Ubuntu путь строится по схеме /etc/php/<версия>/<режим>/php.ini. Номер версии совпадает с установленной веткой, например 8.3 в Ubuntu 24.04 или 8.5 из PPA.
/etc/php/8.3/fpm/php.ini # сайт через nginx + PHP-FPM
/etc/php/8.3/apache2/php.ini # сайт через Apache с mod_php
/etc/php/8.3/cli/php.ini # консоль: cron, artisan, composer
/etc/php/8.3/fpm/conf.d/ # дополнительные .ini (модули и свои настройки)
Чтобы изменения не потерялись при обновлении пакетов, свои значения лучше вынести в отдельный файл в conf.d, а основной php.ini не трогать. Файлы из этой папки читаются по алфавиту после php.ini, поэтому имя с большим номером перекроет всё остальное:
# свой файл настроек для сайта на PHP-FPM
sudo tee /etc/php/8.3/fpm/conf.d/99-custom.ini > /dev/null <<'EOF'
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 120
EOF
sudo systemctl restart php8.3-fpm
В CentOS, AlmaLinux и Rocky Linux основной файл обычно /etc/php.ini, дополнительные лежат в /etc/php.d/. На macOS с Homebrew путь вида /opt/homebrew/etc/php/8.5/php.ini. В официальных Docker-образах php.ini по умолчанию нет, есть только заготовки в /usr/local/etc/php/: свои настройки копируют в /usr/local/etc/php/conf.d/, как показано в статье Docker для PHP.
php.ini на хостинге
На виртуальном хостинге к общему php.ini доступа нет, но изменить параметры можно тремя способами.
- Панель управления. Большинство панелей дают поменять основные значения в настройках PHP сайта: лимит памяти, размер загрузки, время выполнения. Это самый надёжный путь.
- Файл .user.ini в корне сайта. Работает, когда PHP запущен через FPM или CGI. Пишется в том же формате, что php.ini, и перечитывается раз в 5 минут (параметр
user_ini.cache_ttl). - Директивы в .htaccess вида
php_value memory_limit 256M. Работают только с Apache и mod_php; при PHP-FPM такая строка вызывает ошибку 500.
; .user.ini в корне сайта
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 120
На VPS, в том числе с панелью, у вас есть полный доступ: правьте файл FPM нужной версии или добавляйте свой в conf.d, затем перезапускайте службу. О том, что ещё умеет .htaccess, рассказано в статье про файл .htaccess.
Главные параметры php.ini
| Параметр | За что отвечает | Типичное значение |
|---|---|---|
memory_limit | Память на один запрос | 256M, для тяжёлых CMS 512M |
upload_max_filesize | Максимальный размер одного загружаемого файла | 64M |
post_max_size | Весь POST-запрос с файлами | Не меньше upload_max_filesize |
max_execution_time | Время работы скрипта, секунды | 60-300 |
max_input_vars | Число полей в форме | 3000 |
display_errors | Показывать ошибки на странице | On локально, Off на сервере |
date.timezone | Часовой пояс по умолчанию | Europe/Moscow |
Синтаксис файла простой: строка параметр = значение, комментарии начинаются с точки с запятой. Размеры пишутся с буквой K, M или G, без буквы B: запись 256MB PHP не поймёт. Если параметр встречается в файле дважды, действует последнее значение, поэтому перед правкой найдите строку поиском (Ctrl + F).
Отображение ошибок подробно разобрано отдельно, в статье как включить вывод ошибок PHP.
Как увеличить memory_limit
Ошибка "Allowed memory size of 134217728 bytes exhausted" значит, что скрипт упёрся в лимит 128 МБ. Порядок действий:
- Откройте php.ini, путь к которому показала строка "Loaded Configuration File".
- Найдите строку
memory_limitи поставьтеmemory_limit = 256M. - Сохраните файл.
- Перезапустите PHP-FPM (
sudo systemctl restart php8.3-fpm) или Apache. - Проверьте новое значение:
php -r "echo ini_get('memory_limit');"для консоли илиphpinfo()для сайта.

Значение -1 снимает ограничение полностью. Для консольных задач это иногда оправдано, на сайте нет: один зациклившийся запрос займёт всю память сервера. Если скрипт регулярно просит больше 512 МБ, проблема обычно в коде: выборка всей таблицы в массив вместо постраничной обработки.
Загрузка больших файлов
Чтобы загружать файлы до 100 МБ, менять нужно сразу несколько значений, иначе сработает самый маленький лимит:
upload_max_filesize = 100M
post_max_size = 110M ; чуть больше: в запросе есть и другие поля
max_execution_time = 300
max_input_time = 300
У nginx свой лимит на тело запроса, по умолчанию всего 1 МБ. Без него PHP даже не увидит файл, а пользователь получит ошибку 413:
server {
# размер тела запроса, согласованный с post_max_size
client_max_body_size 110M;
}
ini_set: изменение настроек из кода
Часть параметров можно поменять прямо в скрипте функцией ini_set(). Изменение действует только до конца текущего запроса.
<?php
declare(strict_types=1);
// Поднять лимит памяти для тяжёлого экспорта
$old = ini_set('memory_limit', '512M');
if ($old === false) {
error_log('Не удалось изменить memory_limit');
}
ini_set('max_execution_time', '300');
echo ini_get('memory_limit'), PHP_EOL; // 512M
// upload_max_filesize так не изменить: значение останется прежним
ini_set('upload_max_filesize', '100M');
echo ini_get('upload_max_filesize'), PHP_EOL;
Где какой параметр можно менять, определяет его режим:
| Режим | Где можно задать | Примеры |
|---|---|---|
PHP_INI_ALL | Везде, включая ini_set() | memory_limit, max_execution_time, display_errors |
PHP_INI_PERDIR | php.ini, .user.ini, .htaccess | upload_max_filesize, post_max_size, max_input_vars |
PHP_INI_SYSTEM | Только php.ini и конфигурация сервера | opcache.memory_consumption, upload_tmp_dir |
Чтение и запись своих ini-файлов в PHP
Формат ini удобен и для настроек вашего приложения. Функция parse_ini_file() читает файл в массив, а с флагом INI_SCANNER_TYPED превращает true, off и числа в настоящие типы.
; config.ini
[database]
host = 127.0.0.1
port = 3306
debug = off
<?php
declare(strict_types=1);
$config = parse_ini_file(__DIR__ . '/config.ini', true, INI_SCANNER_TYPED);
if ($config === false) {
throw new RuntimeException('Не удалось прочитать config.ini');
}
var_dump($config['database']['port']); // int(3306)
var_dump($config['database']['debug']); // bool(false)
// Записи в ini в PHP нет: собираем строку сами
function writeIni(string $file, array $data): void
{
$out = '';
foreach ($data as $section => $values) {
$out .= "[$section]\n";
foreach ($values as $key => $value) {
$value = is_bool($value) ? ($value ? 'true' : 'false') : $value;
$out .= is_string($value) ? "$key = \"$value\"\n" : "$key = $value\n";
}
$out .= "\n";
}
file_put_contents($file, $out, LOCK_EX);
}
Не кладите ini-файлы с паролями в доступную из браузера папку: веб-сервер отдаст их как обычный текст. Храните их выше корня сайта.
Почему изменения в php.ini не применяются
| Причина | Как исправить |
|---|---|
| Отредактирован не тот файл (cli вместо fpm) | Сверьте путь в phpinfo() сайта |
| PHP-FPM или Apache не перезапущен | sudo systemctl restart php8.3-fpm или перезапуск в панели |
| Значение перекрыто файлом в conf.d или .user.ini | Найдите параметр в папке из "Scan this dir" |
| Строка закомментирована точкой с запятой | Уберите ; в начале строки |
Неверный формат значения (256MB) | Пишите 256M |
Пул FPM задаёт php_admin_value | Измените значение в конфиге пула в pool.d |
Последний случай часто встречается на серверах с панелями: значения задаются в настройках пула PHP-FPM, и через php_admin_value их не перебить ни php.ini, ни ini_set(). Меняйте их в панели или в файле пула, а затем перезапускайте службу.
Частые вопросы
Где находится php.ini?
Точный путь покажет php --ini или строка "Loaded Configuration File" в phpinfo(). В XAMPP это C:\xampp\php\php.ini, в Ubuntu /etc/php/8.3/fpm/php.ini для сайта.
Где лежит php.ini в Ubuntu?
В /etc/php/<версия>/fpm/php.ini для nginx и PHP-FPM, в /etc/php/<версия>/apache2/php.ini для Apache и в /etc/php/<версия>/cli/php.ini для консоли.
Как увеличить память в php.ini?
Поставьте memory_limit = 256M (или больше), сохраните файл и перезапустите PHP-FPM или Apache. Проверьте значение через phpinfo().
Можно ли изменить upload_max_filesize через ini_set?
Нет, это параметр режима PHP_INI_PERDIR. Меняйте его в php.ini, .user.ini или в панели хостинга.
Как изменить php.ini на хостинге без доступа к файлу?
Используйте настройки PHP в панели хостинга или создайте в корне сайта файл .user.ini с нужными строками. Изменения применятся в течение 5 минут.
Почему изменения в php.ini не работают?
Чаще всего отредактирован файл консоли вместо файла веб-сервера или не перезапущен PHP-FPM. Сверьте путь в phpinfo() и перезапустите службу.



