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.