PHP: POST Content-Length exceeds the limit — что делать
Форма прислала больше данных, чем разрешает настройка post_max_size: по умолчанию 8 мегабайт. PHP не принимает ни одного поля, и скрипт получает пустую форму. Лимит поднимают в php.ini.
Содержание 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 bytesPOST 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, другие — что поле не заполнено или файл не выбран.
Какие лимиты проверить
| Где | Настройка | По умолчанию | Если превышен |
|---|---|---|---|
| nginx | client_max_body_size | 1 МБ | ошибка 413 — запрос не доходит до PHP |
| PHP | post_max_size | 8 МБ | эта ошибка: форма пустая |
| PHP | upload_max_filesize | 2 МБ | файл не сохраняется, записи в журнале нет |
Лимиты срабатывают по порядку: сначала 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/.
Как поднять лимит
- Откройте настройки PHP:
sudo nano /etc/php/8.3/fpm/php.ini. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter. - Нажмите Ctrl+W, введите post_max_size = и нажмите Enter — курсор встанет на строку с этой настройкой. Поставьте число с запасом, например
post_max_size = 80M. - Так же найдите
upload_max_filesize =и поставьте наибольший размер одного файла, напримерupload_max_filesize = 64M. Он должен быть меньше post_max_size: в запрос, кроме файла, входят остальные поля формы. - Сохраните файл: Ctrl+O, Enter, Ctrl+X.
- Перезапустите 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 | найдите её в списке |
Источники
- Исходный код PHP 8.3.6: SAPI.c — тексты Cannot modify header information - headers already sent и POST Content-Length … exceeds the limit.
- Исходный код PHP 8.3.6: rfc1867.c — для формы с файлами — тот же текст POST Content-Length; превышение upload_max_filesize только отменяет загрузку файла.
- Справка PHP: настройки ядра — post_max_size, upload_max_filesize и memory_limit; при превышении post_max_size массивы $_POST и $_FILES пустые.
- Справка PHP: коды ошибок загрузки — UPLOAD_ERR_INI_SIZE, код 1: файл больше upload_max_filesize.
- Файл php.ini-production из PHP 8.3.6 — значения для рабочих серверов: display_errors Off, log_errors On, max_execution_time 30, post_max_size 8M, upload_max_filesize 2M.
Сверено 14 октября 2026 года.
Что почитать дальше
- Ошибки PHPкак читать сообщение и где журнал.
- Ошибка 413лимит nginx на размер запроса.
- WordPress: файл превышает upload_max_filesizeто же для WordPress.