The uploaded file exceeds the upload_max_filesize directive in php.ini / UPLOAD_ERR_INI_SIZE
#Какие лимиты участвуют
Размер загружаемого файла ограничивают сразу несколько настроек: 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 игнорируется. | Меняйте в панели. |
#Порядок
- Узнайте текущие значения лимитов в реальном окружении сайтаЭто раздел для администратора сайта, не посетителя. В панели хостинга откройте настройки 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()без ограничений доступа. - Измените upload_max_filesize и post_max_sizeВ настройках PHP сайта установите, например,
upload_max_filesize = 64Mиpost_max_size = 72M, если нужны файлы до 64 МБ и есть ресурсы.post_max_sizeограничивает весь запрос вместе с остальными полями формы, поэтому он должен быть больше загрузочного лимита. Перед изменением запишите текущие значения и проверьте ограничения приложения и свободное место диска; не открывайте загрузку очень больших файлов без защиты авторизации и проверки содержимого. - Увеличьте memory_limit, max_execution_time, max_input_time при тяжёлыхЕсли файл загружается долго или приложение обрабатывает его после приёма, проверьте фактический
max_input_time,max_execution_time,memory_limitи код обработчика. Увеличивайте только тот лимит, который подтверждён журналом ошибки, с учётом памяти всех процессов PHP-FPM; многократная загрузка больших файлов может исчерпать RAM и диск. Для длительной обработки лучше очередь заданий, а не неограниченный таймаут HTTP. - Измените лимит веб-сервераЕсли PHP принимает большой файл, но сервер возвращает HTTP 413, проверьте настройки Nginx/обратного прокси: у Nginx параметр
client_max_body_sizeограничивает размер тела запроса. Администратор может задать согласованное значение в конфигурации конкретного сайта, после чего выполнитьnginx -tи штатную перезагрузку конфигурации. Настройка Apache/прокси будет иной; изменение одного PHP-параметра не исправит 413 от внешнего сервера. - Перезапустите PHP-FPM/ApacheПосле изменения
php.iniадминистратор перечитывает конфигурацию именно нужного PHP-FPM-пула или использует панель управления; имена службы и путь зависят от версии PHP и хостинга. При использовании.user.iniизменение может вступить в силу не сразу из-заuser_ini.cache_ttl. Сначала проверьте синтаксис конфигурации и сделайте резервную копию; не выполняйтеsystemctl restart php8.2-fpmпросто потому, что такая команда встретилась в примере. - Проверьте значения зановоПосле применения откройте закрытую тестовую страницу, снова выведите значения
ini_getи убедитесь, что они изменились у веб-обработчика. Загрузите файл чуть меньше нужного лимита и проверьте результат в приложении. При неудаче посмотрите HTTP-статус,$_FILES['имя']['error'], свободное место иupload_tmp_dir; затем удалите тестовую страницу с настройками сервера. - На хостинге измените лимиты в панели или файле .user.iniЕсли у вас виртуальный хостинг, откройте его панель → параметры сайта → настройки PHP и измените разрешённые лимиты там. Иногда доступен
.user.iniсupload_max_filesizeиpost_max_size, но набор разрешённых директив и задержка применения зависят от обработчика. Сохраняйте файл в правильном каталоге сайта и проверьте, не переопределяет ли параметры вышестоящая конфигурация. Если права изменить лимиты нет — обратитесь в поддержку хостинга. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Частые ошибки
#Проверка результата
После изменения лимитов сначала загрузите в тестовой форме файл чуть меньше нового разрешённого размера и проверьте результат. Не превышайте новый лимит при проверке. Если HTTP 413 остаётся, посмотрите ограничение прокси; если PHP сообщает UPLOAD_ERR_INI_SIZE или UPLOAD_ERR_FORM_SIZE, проверьте конфигурацию PHP и поле MAX_FILE_SIZE формы.