📤
Хостинг

Не загружается большой файл: upload_max_filesize и post_max_size

13.11.2026
← Все статьи

Пытаетесь загрузить в админке сайта большую фотографию, PDF-каталог или архив плагина, и то появляется сообщение «Размер файла превышает допустимый», то форма просто возвращается пустой без всякой ошибки. В обоих случаях причина чаще всего в лимитах PHP на загрузку файлов. Лимитов несколько, и они связаны между собой, поэтому увеличение только одного из них нередко ничего не даёт. Разберём, за что отвечает каждый параметр и как настроить их вместе.

Какие настройки ограничивают загрузку

Главный параметр — upload_max_filesize. Он задаёт максимальный размер одного загружаемого файла, и по умолчанию в PHP это всего 2 МБ. Второй — post_max_size — ограничивает размер всего POST-запроса, то есть сумму всех файлов и текстовых полей формы; по умолчанию 8 МБ. Третий — max_file_uploads — определяет, сколько файлов можно загрузить в одном запросе, по умолчанию 20.

Между ними есть логичный порядок: post_max_size всегда должен быть больше upload_max_filesize, ведь файл — лишь часть запроса. Если форма отправляет несколько файлов, post_max_size должен вмещать их общий объём. В документации PHP также рекомендуется, чтобы memory_limit был больше post_max_size. При долгой загрузке важны ещё max_input_time и max_execution_time.

ПараметрЧто ограничиваетПо умолчанию
upload_max_filesizeРазмер одного файла2M
post_max_sizeРазмер всего запроса8M
max_file_uploadsЧисло файлов в одном запросе20

Хостинг-провайдеры обычно ставят значения больше стандартных, поэтому точные цифры стоит проверить на своём сайте.

Почему форма возвращается пустой без ошибки

Самая запутанная ситуация возникает, когда запрос превышает post_max_size. PHP тогда вообще не разбирает запрос: массивы $_POST и $_FILES приходят пустыми, и приложение не может показать понятную ошибку. Страница просто обновляется, введённые данные пропадают. В журнале остаётся предупреждение примерно такого вида:

PHP Warning: POST Content-Length of 52428800 bytes exceeds the limit of 8388608 bytes in Unknown on line 0

Если файл больше upload_max_filesize, но меньше post_max_size, всё яснее. Запрос принимается, но файл не сохраняется, а $_FILES['file']['error'] равен UPLOAD_ERR_INI_SIZE (1). Хорошо написанное приложение проверяет этот код и сообщает пользователю о лимите:

if ($_FILES['file']['error'] === UPLOAD_ERR_INI_SIZE) {
    echo 'Файл слишком большой. Допустимый размер: ' . ini_get('upload_max_filesize');
}

413 Request Entity Too Large: лимит веб-сервера

Если после увеличения настроек PHP большой файл всё равно не загружается, а браузер показывает 413 Request Entity Too Large, запрос отклонил веб-сервер ещё до PHP. В Nginx за это отвечает client_max_body_size, по умолчанию 1 МБ. В Apache похожую роль играет LimitRequestBody. На виртуальном хостинге эти серверные настройки обычно недоступны клиенту, поэтому в такой ситуации нужно обратиться в техподдержку. На собственном VPS значение добавляется в конфигурацию Nginx, после чего сервис перезагружается:

# /etc/nginx/conf.d/example.uz.conf, внутри блока server
client_max_body_size 64m;

sudo nginx -t && sudo systemctl reload nginx

Где менять настройки

На виртуальном хостинге проще всего воспользоваться настройками PHP в панели. В ISPmanager для сайта можно изменить upload_max_filesize и post_max_size; клиенты sayt.uz входят в панель из кабинета sayt.uz. Если PHP работает в режиме FPM или CGI, подойдёт и файл .user.ini в папке сайта. Не забудьте менять оба параметра вместе:

; .user.ini
upload_max_filesize = 64M
post_max_size = 72M
max_execution_time = 120

Через ini_set() в коде эти параметры изменить нельзя. Причина простая: PHP принимает запрос до запуска скрипта и проверяет лимит именно на этом этапе, а скрипт начинает работать слишком поздно. Строка php_value в .htaccess работает только при PHP в виде модуля Apache, в остальных режимах она вызовет ошибку 500.

Чтобы проверить результат, в WordPress посмотрите надпись «Максимальный размер загружаемого файла» в окне загрузки раздела «Медиафайлы». На других сайтах достаточно временного скрипта, выводящего ini_get('upload_max_filesize').

Пример: колледж в Бухаре и видеолекции

У профессионального колледжа в Бухаре на сайте misol.uz есть раздел материалов для преподавателей. PDF-презентации по 5–10 МБ загружались без проблем, но при попытке загрузить видеолекцию на 300 МБ страница долго думала, а потом возвращалась пустой. Проверка показала, что post_max_size равен 64 МБ. Поднимать лимит выше 300 МБ здесь было бы неправильно: при медленном интернете такая загрузка идёт несколько минут, при обрыве её приходится начинать заново, а ресурсы сервера всё это время заняты. Поэтому для PDF лимит оставили 64 МБ, а видео стали размещать на видеоплатформе и встраивать на сайт только ссылку и плеер.

Другие пути для очень больших файлов

Загружать файлы в сотни мегабайт или гигабайты через браузерную форму — не лучшая идея. Гораздо надёжнее такие способы:

Выбирая лимиты, исходите из того, с какими файлами сайт реально работает. Для изображений и документов обычно хватает 32–64 МБ, для более крупных файлов безопаснее альтернативные пути выше. Чрезмерно большой лимит к тому же даёт злоумышленнику возможность нагружать сервер огромными запросами.

Похожие статьи

⚡ Как измерить скорость сайта в Tas-IX: команды и разбор результатов 🔌 WebSocket на хостинге: обычный хостинг, VPS и настройка Nginx 🐢 Лог медленных запросов MySQL: как найти проблемный запрос 📦 Переезд с Plesk на другую панель: что забрать и о чём не забыть
🌐 Язык
🇺🇿 O'zbek 🇺🇿 Ўзбек 🇷🇺 Русский ✓ 🇬🇧 English