Справочник

upload_max_filesize и post_max_size: как увеличить размер загрузки

Размер загрузки в PHP ограничивают две настройки: upload_max_filesize — один файл, по умолчанию 2 МБ, и post_max_size — вся форма, 8 МБ. Для сайта на nginx есть третий лимит — client_max_body_size, 1 МБ. Поднимать нужно все три.

≈ 4 мин чтения
Содержание 7

Что сделать прямо сейчас

  1. Команды вводятся на сервере: подключитесь к нему по SSH ([как подключиться](/instrukcii/kak-podklyuchitsya-k-vps-po-ssh/)) и набирайте их в том же окне.
  2. Откройте файл настроек PHP для сайта: sudo nano /etc/php/8.3/fpm/php.ini. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter.
  3. Нажмите Ctrl+W, введите upload_max_filesize и нажмите Enter — курсор встанет на строку с этой настройкой. Впишите новое значение: upload_max_filesize = 64M.
  4. Так же найдите post_max_size и впишите post_max_size = 80M: этот лимит должен быть больше, ведь в форме кроме файла есть и другие данные.
  5. Сохраните файл: Ctrl+O, Enter, затем Ctrl+X.
  6. Перезапустите PHP-FPM: sudo systemctl restart php8.3-fpm. Если команда ничего не ответила, PHP перезапущен.
  7. Поднимите лимит nginx: строка client_max_body_size 80m; — как это сделать.
  8. Проверьте: php-fpm8.3 -i | grep -E 'upload_max_filesize|post_max_size' — в ответе будут обе настройки с новыми значениями.

64M и 80M — пример: ставьте под свои файлы. Команды — для PHP 8.3 из Ubuntu 24.04. В Ubuntu 26.04 стоит PHP 8.5: в путях и командах вместо 8.3 пишите 8.5. Какая версия у вас, покажет ls /etc/php/.

Какие лимиты бывают

ГдеНастройкаПо умолчаниюЧто ограничивает
nginxclient_max_body_size1 МБвесь запрос
PHPpost_max_size8Mвсю форму вместе с файлами
PHPupload_max_filesize2Mкаждый файл
PHPmax_file_uploads20сколько файлов за один раз

Запрос проходит лимиты по порядку: сначала nginx, потом PHP. По тому, какой лимит сработал, видно, что поднимать.

Что видитеКакой лимит сработал
страница с кодом 413client_max_body_size в nginx
форма пришла пустой, в журнале POST Content-Length of … bytes exceeds the limitpost_max_size
файл не сохранился, в журнале upload_max_filesize of … bytes exceededupload_max_filesize
часть файлов не загрузилась, в журнале Maximum number of allowable file uploads has been exceededmax_file_uploads

Журнал ошибок PHP для сайта на nginx — журнал nginx: sudo tail -n 30 /var/log/nginx/error.log.

Почему post_max_size больше

post_max_size ограничивает весь запрос: файл, остальные поля формы и служебные строки между ними. Если он равен upload_max_filesize, файл ровно на пределе уже не пройдёт. Справка PHP прямо говорит: post_max_size должен быть больше upload_max_filesize. Если форма загружает несколько файлов сразу, post_max_size должен вмещать их все.

client_max_body_size в nginx ставьте не меньше post_max_size — иначе nginx отклонит запрос раньше, чем до него дойдёт PHP.

Только для одного сайта

Только для одного сайта — строкой php_admin_value[upload_max_filesize] = 64M в пуле PHP-FPM или строкой upload_max_filesize = 64M в файле .user.ini: как это сделать. post_max_size задают так же.

Функция ini_set() эти лимиты не меняет: PHP принимает файл до того, как запустится код сайта.

Для WordPress — разбор с сообщениями WordPress.

На виртуальном хостинге

Лимиты загрузки меняют в панели хостинга, в разделе с настройками PHP. Если там их нет или максимум мал, спросите поддержку.

Источники

Сверено 14 октября 2026 года.

Что почитать дальше