
⚙️ Как исправить ошибку «Загруженный файл превышает директиву upload_max_filesize» в php.ini
Вы загружаете тему, плагин или картинку в медиатеку WordPress и видите красную строку: «Загруженный файл превышает директиву upload_max_filesize в php.ini». Файл весит 10 мегабайт, а WordPress его не пропускает. Знакомая ситуация для каждого, кто администрирует сайт.
Проблема не в WordPress и не в вашем файле. Хостинг-провайдеры ограничивают размер загружаемых файлов на уровне PHP, и стандартный лимит в 2 мегабайта не менялся годами. Вы можете поднять его за пять минут любым из пяти способов ниже, от самого простого до более продвинутого.
💡 Быстрый обзор:
- Увеличьте лимит через wp-config.php, один вызов
ini_set, работает на большинстве хостингов - Измените настройки в cPanel через MultiPHP INI Editor, если хост использует cPanel
- Создайте или отредактируйте php.ini через FTP, метод работает независимо от панели управления
- Добавьте директивы в.htaccess, когда нет доступа к php.ini
- В крайнем случае пропишите
@ini_setв functions.php дочерней темы
Откуда берётся ограничение upload_max_filesize
Директива upload_max_filesize живёт в конфигурационном файле php.ini, главном файле настроек PHP на вашем сервере. Она определяет максимальный размер одного загружаемого файла. По умолчанию значение составляет 2 мегабайта, этого хватает для небольших изображений, но тема WordPress или видеоролик в такую рамку не влезают.
Рядом с ней работают ещё две директивы: post_max_size (общий размер POST-запроса, по умолчанию 8 МБ) и memory_limit (доступная скрипту память, по умолчанию 128 МБ). Все три связаны: подняли upload_max_filesize, проверьте что post_max_size не меньше нового значения, иначе ограничение останется на прежнем уровне.
Проверить текущие лимиты можно прямо из админки WordPress: перейдите в Медиафайлы → Добавить новый и посмотрите на строку под областью загрузки, там указан максимальный размер. Альтернативно, установите плагин PHP Info и найдите нужные директивы в выводе phpinfo().
1. Увеличьте лимит через wp-config.php
Самый быстрый способ, который работает на большинстве shared-хостингов. Файл wp-config.php находится в корневой папке сайта и загружается до выполнения любого кода WordPress, поэтому директивы ini_set в нём имеют приоритет.
Подключитесь к серверу через FTP-клиент (FileZilla, бесплатный и надёжный вариант) или откройте Файловый менеджер в панели управления хостингом. Найдите wp-config.php в корневой папке (обычно public_html):

Добавьте следующие строки в конец файла, перед комментарием /* That's all, stop editing! */:
1 @ini_set('upload_max_filesize', '64M'); 2 @ini_set('post_max_size', '80M'); 3 @ini_set('memory_limit', '256M'); 4 @ini_set('max_execution_time', '300');
Сохраните файл и обновите страницу медиатеки WordPress. Лимит загрузки должен измениться на 64 мегабайта. Если число не поменялось, хостинг-провайдер заблокировал ini_set, переходите к следующему способу.
2. Измените настройки через MultiPHP INI Editor в cPanel
Если ваш хост использует cPanel, встроенный редактор MultiPHP INI Editor позволяет менять настройки PHP без возни с файлами вручную. Он автоматически применяет значения к выбранному сайту и перезаписывает хостинговые дефолты.
Войдите в cPanel и найдите раздел Software → MultiPHP INI Editor:

Выберите нужный сайт из выпадающего списка вверху страницы. Прокрутите вниз до директивы upload_max_filesize и введите новое значение (например, 64M). Ниже найдите post_max_size и установите его чуть больше, 80M. Нажмите Apply. Изменения вступают в силу мгновенно.
Этот способ предпочтительнее первого: cPanel сам следит за синтаксисом, и настройки не сбрасываются после обновления WordPress.
3. Отредактируйте php.ini через FTP
Если доступ к cPanel отсутствует или хост не поддерживает MultiPHP INI Editor, работайте напрямую с файлом php.ini. Он управляет всеми настройками PHP, и изменение в нём, самый надёжный способ поднять лимиты.
Подключитесь к серверу по FTP и перейдите в корневую папку сайта. Найдите файл php.ini. Если его нет (на shared-хостингах пользовательский php.ini часто отсутствует), создайте новый текстовый файл с таким именем:

Добавьте в файл следующие директивы:
1 upload_max_filesize = 64M 2 post_max_size = 80M 3 memory_limit = 256M 4 file_uploads = On 5 max_execution_time = 300 6 max_input_time = 300
Сохраните файл. Чтобы изменения применились, некоторым хостинг-провайдерам требуется директива suPHP в файле .htaccess. Добавьте в .htaccess блок:
1 <IfModule mod_suphp.c> 2 suPHP_ConfigPath /home/yourusername/public_html 3 </IfModule>
Замените yourusername на имя пользователя вашего хостинг-аккаунта. Если после добавления этого блока сайт упал с ошибкой, удалите блок, ваш сервер работает на CGI и suPHP не требуется.
На локальных серверах путь к php.ini зависит от платформы: XAMPP (Windows): C:\xampp\php\php.ini; MAMP (macOS): /Applications/MAMP/conf/php/php.ini; LAMP (Linux): /etc/php/версия/apache2/php.ini. После редактирования перезапустите веб-сервер.
4. Добавьте директивы в.htaccess
Когда хостинг-провайдер заблокировал доступ к php.ini и ini_set не работает, последний рубеж на уровне сервера, файл .htaccess. Он позволяет задавать настройки PHP для конкретной папки сайта через директивы php_value.
Подключитесь по FTP и найдите .htaccess в корневой папке. Скачайте резервную копию на компьютер (обязательно!). Затем добавьте в конец файла следующие строки:

1 php_value upload_max_filesize 64M 2 php_value post_max_size 80M 3 php_value memory_limit 256M 4 php_value max_execution_time 300 5 php_value max_input_time 300
Сохраните .htaccess и обновите сайт. Если вместо сайта появляется ошибка 500 Internal Server Error, ваш сервер работает на CGI, и директива php_value в .htaccess не поддерживается. Удалите добавленные строки, чтобы восстановить сайт, и используйте способ 3 (создание php.ini).
Ошибку 500 и её разновидность 502 мы подробно разбирали в руководстве по исправлению серверных ошибок WordPress.
5. Пропишите @ini_set в functions.php темы
Способ для ситуаций, когда все предыдущие методы недоступны или вы хотите держать настройки в репозитории темы. Добавьте код в файл functions.php дочерней темы, он выполняется при каждом запросе и переопределяет лимиты на лету.
1 @ini_set('upload_max_filesize', '64M'); 2 @ini_set('post_max_size', '80M'); 3 @ini_set('memory_limit', '256M'); 4 @ini_set('max_execution_time', '300');
Код разместите в конце functions.php, но перед закрывающим ?> (если он есть). Используйте дочернюю тему: при обновлении родительской темы правки в functions.php основной темы сбрасываются, дочерняя тема переживает обновления без потерь.
После добавления кода проверьте лимит в медиатеке WordPress. Учтите, что на некоторых хостингах ini_set для upload_max_filesize заблокирован на уровне PHP (директива PHP_INI_SYSTEM не позволяет менять значение во время выполнения). В таком случае @ini_set молча проигнорируется, и вам нужен способ 3 или 4.
Почему лимит не изменился: диагностика
Сделали всё по инструкции, а ограничение осталось прежним? Пройдите этот чек-лист:
post_max_sizeменьше новогоupload_max_filesize. Это самая частая причина:post_max_sizeдолжен быть не меньше, а желательно на 20-30% больше значенияupload_max_filesize: документация PHP прямо требуетpost_max_size≥upload_max_filesize. Пакетная загрузка нескольких файлов и поля формы учитываются вpost_max_size.- Файл создан не в той папке. PHP ищет
php.iniв директории скрипта, затем поднимается по дереву до корня сервера. Положитеphp.iniв корень сайта (public_html), а не в подпапку. - Кеш PHP (OPcache) хранит старую конфигурацию. Некоторые серверы кешируют
php.ini. Перезапустите PHP через панель хостинга или дождитесь 5-10 минут, пока кеш инвалидируется. - Сервер на CGI/FastCGI игнорирует
.htaccess. Замените подход: используйтеphp.ini(способ 3) илиuser.iniдля FastCGI. - Хостинг-провайдер жёстко запер лимит. На сверхдешёвых тарифах лимит загрузки фиксирован и не меняется никаким способом, кроме смены тарифа.
Если ни один из перечисленных пунктов не помог, обратитесь в поддержку хостинга. Назовите домен, метод, которым вы меняли лимит, и попросите проверить, разрешено ли переопределение upload_max_filesize на вашем тарифе.
Видеоинструкция
Пошаговый процесс исправления ошибки от диагностики до финальной проверки смотрите в этом видео:
⁉️🤔 Частые вопросы
Какое значение upload_max_filesize выбрать?
Для большинства сайтов достаточно 64 МБ, это покрывает загрузку тем, плагинов и изображений высокого разрешения. Если вы работаете с видеофайлами или большими ZIP-архивами через админку, ставьте 128-256 МБ. Не гонитесь за гигабайтами без причины: чем выше лимит, тем больше памяти резервирует сервер под каждый запрос загрузки.
Можно ли загрузить файл в обход лимита?
Да, через FTP. FTP-клиент подключается к серверу напрямую и не проходит через PHP-обработчик, поэтому лимиты
upload_max_filesizeна него не действуют. Загрузите файл вwp-content/uploadsчерез FTP, а затем зарегистрируйте его в медиатеке WordPress плагином Add From Server.
Чем отличается upload_max_filesize от post_max_size?
upload_max_filesize, максимальный размер одного файла в загрузке.post_max_size, общий размер всего POST-запроса, включая все файлы, поля формы и служебные заголовки. Если вы загружаете три файла по 20 МБ,upload_max_filesizeдолжен быть ≥ 20 МБ, аpost_max_size, ≥ 60 МБ плюс запас на форму. Поэтомуpost_max_sizeвсегда ставят большеupload_max_filesize.
Почему лимиты сбрасываются после обновления WordPress?
WordPress не трогает серверные настройки PHP при обновлении, но если вы правили
wp-config.phpилиfunctions.phpосновной темы, обновление ядра/темы могло перезаписать эти файлы. Всегда держите кастомные настройки PHP вphp.ini, cPanel MultiPHP INI Editor или дочерней теме, эти локации не затрагиваются обновлениями.
Нужно ли перезагружать сервер после изменения php.ini?
Для shared-хостинга и cPanel, нет, изменения применяются в течение нескольких минут автоматически. Для VPS и выделенного сервера с PHP-FPM перезапустите сервис:
sudo systemctl restart php-fpm(илиphp8.3-fpm, в зависимости от версии). Apache с mod_php обычно подхватывает изменения без перезапуска.
Что делать, если лимит всё равно не поднимается
Пять способов выше закрывают практически любой хостинг-сценарий. От банального wp-config.php до functions.php дочерней темы, вы прошли всю цепочку. Если после честного выполнения каждого пункта и диагностики ограничение осталось на месте, причина в жёсткой политике хостинг-провайдера, и без смены тарифа или хостера её не обойти.
Свяжитесь с поддержкой и прямо спросите, разрешено ли переопределение upload_max_filesize на вашем тарифном плане. Ответ «нет», повод задуматься о переходе на VPS или более гибкий shared-тариф, где вы контролируете настройки PHP без оглядки на соседей по серверу. В промежутке заливайте крупные файлы через FTP: ограничений по размеру там нет, а в медиатеку их подцепит Add From Server.



