Skip to content

Всё для WordPress, веб-разработки — и не только

⚙️ Как исправить ошибку «Загруженный файл превышает директиву upload_max_filesize» в php.ini

⚙️ Как исправить ошибку «Загруженный файл превышает директиву 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):

Код для wp-config.php с увеличением лимита памяти

Добавьте следующие строки в конец файла, перед комментарием /* 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:

MultiPHP INI Editor в панели cPanel с настройками PHP

Выберите нужный сайт из выпадающего списка вверху страницы. Прокрутите вниз до директивы 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 часто отсутствует), создайте новый текстовый файл с таким именем:

Содержимое файла php.ini с настройками upload_max_filesize

Добавьте в файл следующие директивы:

1upload_max_filesize = 64M
2post_max_size = 80M
3memory_limit = 256M
4file_uploads = On
5max_execution_time = 300
6max_input_time = 300

Сохраните файл. Чтобы изменения применились, некоторым хостинг-провайдерам требуется директива suPHP в файле .htaccess. Добавьте в .htaccess блок:

1<IfModule mod_suphp.c>
2suPHP_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 в корневой папке. Скачайте резервную копию на компьютер (обязательно!). Затем добавьте в конец файла следующие строки:

Директивы php_value в файле .htaccess для увеличения лимита загрузки
1php_value upload_max_filesize 64M
2php_value post_max_size 80M
3php_value memory_limit 256M
4php_value max_execution_time 300
5php_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_sizeupload_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.