PHP: файл превышает upload_max_filesize — не загружаются большие файлы

  • Обновлено
  • Чтение ≈ 4 минуты
  • Нужны права администратора

Краткий ответ

Ошибка превышения upload_max_filesize в PHP возникает, когда загружаемый файл больше лимита php.ini. Увеличьте upload_max_filesize и post_max_size, лимиты веб-сервера, проверьте реальные значения через phpinfo и перезапустите службу.

В этой статье
  1. Какие лимиты участвуют
  2. Порядок
  3. Частые ошибки
  4. Проверка результата
upload_max_filesize exceeded
The uploaded file exceeds the upload_max_filesize directive in php.ini / UPLOAD_ERR_INI_SIZE
По-русскиPHP отклонил файл из-за превышения лимита размера.

#Какие лимиты участвуют

Размер загружаемого файла ограничивают сразу несколько настроек: upload_max_filesize (максимум одного файла), post_max_size (общий размер запроса, должен быть не меньше upload_max_filesize), memory_limit, max_execution_time, max_input_time, а также лимиты веб-сервера (client_max_body_size в nginx, LimitRequestBody в Apache) и прокси/CDN. Если изменить только одну настройку, ошибка сохранится. Код ошибки загрузки UPLOAD_ERR_INI_SIZE (1) говорит о превышении именно upload_max_filesize, а UPLOAD_ERR_FORM_SIZE (2) — лимита формы.

Возможная причинаКак узнатьЧто делать
post_max_size меньше upload_max_filesizeЗабыли поднять.Загрузка падает без сообщения.Установите post_max_size больше.
Не перезапущен PHPИзменения не применены.ini_get показывает старое.Перезапустите службу.
Правили не тот php.iniCLI вместо FPM.Консоль показывает новое, сайт старое.Проверьте phpinfo.
Лимит nginx 1 МБПо умолчанию.Ошибка 413.client_max_body_size.
Лимит CDN или проксиCloudflare 100 МБ.Обрыв при загрузке.Загружайте напрямую.
Хостинг запрещает менятьОбщие лимиты..user.ini игнорируется.Меняйте в панели.

#Порядок

  1. Узнайте текущие значения лимитов в реальном окружении сайтаЭто раздел для администратора сайта, не посетителя. В панели хостинга откройте настройки PHP именно проблемного сайта и найдите upload_max_filesize, post_max_size и file_uploads. PHP CLI может использовать другой php.ini, поэтому вывод php -i по SSH не доказывает лимиты сайта. Для диагностики можно на закрытой тестовой странице выполнить ini_get('upload_max_filesize'), ini_get('post_max_size') и затем удалить её; не публикуйте полный phpinfo() без ограничений доступа.
  2. Измените upload_max_filesize и post_max_sizeВ настройках PHP сайта установите, например, upload_max_filesize = 64M и post_max_size = 72M, если нужны файлы до 64 МБ и есть ресурсы. post_max_size ограничивает весь запрос вместе с остальными полями формы, поэтому он должен быть больше загрузочного лимита. Перед изменением запишите текущие значения и проверьте ограничения приложения и свободное место диска; не открывайте загрузку очень больших файлов без защиты авторизации и проверки содержимого.
  3. Увеличьте memory_limit, max_execution_time, max_input_time при тяжёлыхЕсли файл загружается долго или приложение обрабатывает его после приёма, проверьте фактический max_input_time, max_execution_time, memory_limit и код обработчика. Увеличивайте только тот лимит, который подтверждён журналом ошибки, с учётом памяти всех процессов PHP-FPM; многократная загрузка больших файлов может исчерпать RAM и диск. Для длительной обработки лучше очередь заданий, а не неограниченный таймаут HTTP.
  4. Измените лимит веб-сервераЕсли PHP принимает большой файл, но сервер возвращает HTTP 413, проверьте настройки Nginx/обратного прокси: у Nginx параметр client_max_body_size ограничивает размер тела запроса. Администратор может задать согласованное значение в конфигурации конкретного сайта, после чего выполнить nginx -t и штатную перезагрузку конфигурации. Настройка Apache/прокси будет иной; изменение одного PHP-параметра не исправит 413 от внешнего сервера.
  5. Перезапустите PHP-FPM/ApacheПосле изменения php.ini администратор перечитывает конфигурацию именно нужного PHP-FPM-пула или использует панель управления; имена службы и путь зависят от версии PHP и хостинга. При использовании .user.ini изменение может вступить в силу не сразу из-за user_ini.cache_ttl. Сначала проверьте синтаксис конфигурации и сделайте резервную копию; не выполняйте systemctl restart php8.2-fpm просто потому, что такая команда встретилась в примере.
  6. Проверьте значения зановоПосле применения откройте закрытую тестовую страницу, снова выведите значения ini_get и убедитесь, что они изменились у веб-обработчика. Загрузите файл чуть меньше нужного лимита и проверьте результат в приложении. При неудаче посмотрите HTTP-статус, $_FILES['имя']['error'], свободное место и upload_tmp_dir; затем удалите тестовую страницу с настройками сервера.
  7. На хостинге измените лимиты в панели или файле .user.iniЕсли у вас виртуальный хостинг, откройте его панель → параметры сайта → настройки PHP и измените разрешённые лимиты там. Иногда доступен .user.ini с upload_max_filesize и post_max_size, но набор разрешённых директив и задержка применения зависят от обработчика. Сохраняйте файл в правильном каталоге сайта и проверьте, не переопределяет ли параметры вышестоящая конфигурация. Если права изменить лимиты нет — обратитесь в поддержку хостинга.
  8. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Текущие значения для CLI
    Linux · Терминал (Bash)Команда
    Текущие значения для CLI
    php -i | grep -Ei 'upload_max_filesize|post_max_size|memory_limit|max_execution_time|max_input_time|file_uploads'
    Вариант 2Значения для веб-окружения (откройте в браузере, затем удалите файл)
    PHPКоманда
    Значения для веб-окружения (откройте в браузере, затем удалите файл)
    <?php
    foreach (['upload_max_filesize','post_max_size','memory_limit','max_execution_time','upload_tmp_dir'] as $k) {
    echo $k, ' = ', ini_get($k), "\n";
    }
    Вариант 3Лимиты в php.ini (на хостинге — .user.ini в корне сайта)
    INIКоманда
    Лимиты в php.ini (на хостинге — .user.ini в корне сайта)
    upload_max_filesize = 64M
    post_max_size = 72M
    memory_limit = 256M
    max_execution_time = 300
    max_input_time = 300
    Вариант 4Лимит nginx (блок server)
    NginxКоманда
    Лимит nginx (блок server)
    client_max_body_size 72M;
    Вариант 5Лимиты PHP для Apache с mod_php
    ТекстКоманда
    Лимиты PHP для Apache с mod_php
    php_value upload_max_filesize 64M
    php_value post_max_size 72M
    Вариант 6Жёсткая команда restart php8.2-fpm исключена
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Жёсткая команда restart php8.2-fpm исключена
    # Пример для сервера Nginx, только после изменения его конфигурации
    sudo nginx -t
    # Если проверка успешна:
    sudo systemctl reload nginx
    # PHP-FPM перезапускайте только для ФАКТИЧЕСКОЙ версии и пула сайта

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

#Частые ошибки

#Проверка результата

После изменения лимитов сначала загрузите в тестовой форме файл чуть меньше нового разрешённого размера и проверьте результат. Не превышайте новый лимит при проверке. Если HTTP 413 остаётся, посмотрите ограничение прокси; если PHP сообщает UPLOAD_ERR_INI_SIZE или UPLOAD_ERR_FORM_SIZE, проверьте конфигурацию PHP и поле MAX_FILE_SIZE формы.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.