Ошибки

PHP: POST Content-Length exceeds the limit — что делать

Форма прислала больше данных, чем разрешает настройка post_max_size: по умолчанию 8 мегабайт. PHP не принимает ни одного поля, и скрипт получает пустую форму. Лимит поднимают в php.ini.

≈ 5 мин чтения
Содержание 8

Как выглядит ошибка

Посетитель загружает большой файл или отправляет длинную форму — и ничего не сохраняется, страница ведёт себя так, будто форму не заполняли. В журнале nginx — sudo tail -n 30 /var/log/nginx/error.log — запись с такими словами:

PHP Warning:  PHP Request Startup: POST Content-Length of 15728640 bytes exceeds the limit of 8388608 bytes
  • POST Content-Length of 15728640 bytes — сколько данных прислала форма: здесь 15 мегабайт.
  • the limit of 8388608 bytes — сколько разрешено. 8388608 байт — это 8 мегабайт, значение post_max_size по умолчанию.

Если форма с файлом, слов PHP Request Startup: в записи может не быть — остальной текст тот же.

Почему форма приходит пустой

PHP проверяет размер запроса до того, как запустить скрипт. Если он больше post_max_size, PHP не разбирает форму вовсе: массивы $_POST и $_FILES пустые. Скрипт работает дальше, но не видит ни файла, ни полей. Поэтому сайты показывают странные ошибки: WordPress — The link you followed has expired, другие — что поле не заполнено или файл не выбран.

Какие лимиты проверить

ГдеНастройкаПо умолчаниюЕсли превышен
nginxclient_max_body_size1 МБошибка 413 — запрос не доходит до PHP
PHPpost_max_size8 МБэта ошибка: форма пустая
PHPupload_max_filesize2 МБфайл не сохраняется, записи в журнале нет

Лимиты срабатывают по порядку: сначала nginx, потом PHP. Если файл больше 1 МБ и вы видите не 413, а эту запись, — в nginx лимит уже подняли, осталось поднять в PHP.

Команды вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне. Посмотрите, что стоит в настройках PHP для сайта:

grep -n '^post_max_size\|^upload_max_filesize\|^memory_limit' /etc/php/8.3/fpm/php.ini

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

Как поднять лимит

  1. Откройте настройки PHP: sudo nano /etc/php/8.3/fpm/php.ini. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter.
  2. Нажмите Ctrl+W, введите post_max_size = и нажмите Enter — курсор встанет на строку с этой настройкой. Поставьте число с запасом, например post_max_size = 80M.
  3. Так же найдите upload_max_filesize = и поставьте наибольший размер одного файла, например upload_max_filesize = 64M. Он должен быть меньше post_max_size: в запрос, кроме файла, входят остальные поля формы.
  4. Сохраните файл: Ctrl+O, Enter, Ctrl+X.
  5. Перезапустите PHP: sudo systemctl restart php8.3-fpm. Если команда ничего не ответила, PHP перезапущен.

В nginx client_max_body_size должен быть не меньше post_max_size — как его поднять.

memory_limit держите больше post_max_size: при 128M и post_max_size больше 128M поднимите и его. Как — лимит памяти PHP.

Если файл не загружается, а записи нет

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

Для WordPress — разбор upload_max_filesize.

Ошибки рядом

Что видитеЧто делать
413 Request Entity Too Largeлимит nginx
WordPress: The link you followed has expiredразбор
Allowed memory size … exhaustedне хватает памяти PHP
Maximum execution time … exceeded при загрузкескрипт работал дольше лимита
другая ошибка PHPнайдите её в списке

Источники

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

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