Skip to content

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

🔧 Как исправить ошибку загрузки изображения в WordPress

🔧 Как исправить ошибку загрузки изображения в WordPress

Ошибка загрузки изображения в WordPress бьёт в самый неподходящий момент. Готовите пост, подбираете картинку, жмёте «Загрузить», а WordPress молча показывает «HTTP Error» или отказывается сохранять файл без объяснений. И ладно бы один раз, но у некоторых админов загрузка падает стабильно раз в несколько дней.

Причина редко лежит на поверхности. Виновником может быть что угодно: слетевшие права доступа после миграции, конфликт плагинов безопасности, урезанный memory limit на дешёвом shared-тарифе или ModSecurity, который принял вашу картинку за атаку. Хорошая новость: почти все причины устраняются без программиста и без звонка в поддержку хостинга.

В этом руководстве, полная цепочка диагностики и исправления ошибки загрузки изображений. От простого (смена браузера, переименование файла) до серверного (правка php.ini, .htaccess и wp-config.php). Берите и чините, большинство кейсов закрывается за 5-10 минут.

💡 Быстрый обзор:

  • Проверьте права доступа к папке /wp-content/uploads/ через FTP или cPanel File Manager: 744 для папок и 644 для файлов.
  • При HTTP-ошибке пройдите цепочку: очистка кеша браузера → переименование файла → сжатие → деактивация плагинов → увеличение памяти PHP → смена версии PHP.
  • Для ошибок «Missing a temporary folder» и превышения лимита размера, пара строк в wp-config.php и .htaccess.
  • Пользователи GoDaddy и DreamHost, отдельные решения в конце.

Почему вообще возникает ошибка загрузки изображений

WordPress хранит все медиафайлы в /wp-content/uploads/. Чтобы записать туда картинку, PHP-процессу нужны права на запись. Если права сбиты, а это случается при обновлении сервера, миграции, смене хостинга или даже после автоматического патча PHP, загрузка падает молча.

Окно загрузки изображения в WordPress с ошибкой

Вторая группа причин: конфигурация PHP, а именно memory limit, параметры upload_max_filesize и post_max_size, путь к временной папке. Если любой из этих параметров не дотягивает, WordPress не пропустит файл. На дешёвых shared-тарифах хостеры часто режут буферы жёстче, чем указано в phpinfo(), и вы видите «HTTP Error» без намёка на истинную причину.

Медиабиблиотека WordPress с отсутствующими изображениями

И наконец, конфликты. Плагин безопасности перехватывает POST-запрос, тема переопределяет обработку медиа, ModSecurity на уровне веб-сервера считает загрузку угрозой. Диагностика, в следующем разделе.

1. Проверьте права доступа к папке uploads

Самая частая причина, неверные права на /wp-content/uploads/. WordPress не может писать в папку и молча отказывает в загрузке. Решение: выставить правильные CHMOD через FTP.

Подключитесь к сайту через FTP-клиент, например, FileZilla. Перейдите в /wp-content/, найдите папку uploads, кликните правой кнопкой и выберите «Права доступа к файлу» (File permissions):

Контекстное меню FTP с выбором прав доступа к папке uploads

В открывшемся окне введите 744 в поле числового значения. Отметьте «Рекурсия по подкаталогам» (Recurse into subdirectories) и «Применить только к каталогам» (Apply to directories only). Нажмите OK.

Диалог установки прав 744 для папок в FileZilla

Если 744 не решило проблему, попробуйте 755, владелец получает чтение, запись и выполнение, группа и остальные, чтение и выполнение.

Теперь права для файлов внутри uploads. Снова правый клик по папке uploads → «Права доступа к файлу». Введите 644, отметьте «Рекурсия по подкаталогам» и «Применить только к файлам» (Apply to files only). OK.

Диалог установки прав 644 для файлов в FileZilla

Попробуйте загрузить изображение снова. В большинстве случаев ошибка уходит сразу после этой процедуры. Не помогло, идём дальше.

2. Пройдите цепочку решений HTTP-ошибки

HTTP-ошибка при загрузке, самая неприятная, потому что WordPress не оставляет следов в логах. Просто надпись «HTTP Error», и всё. Приходится идти перебором. Ниже цепочка от простого к сложному: проходите по порядку, пока загрузка не заработает.

2.1. Обновите страницу или смените браузер

Звучит банально, но работает чаще, чем кажется. Иногда сессия WordPress истекает, и после повторного входа ошибка исчезает. Обновите страницу жёстким сбросом кеша: Ctrl+F5 на Windows, Cmd+Shift+R на Mac. Не помогло, откройте сайт в другом браузере. Если в Chrome ошибка есть, а в Firefox нет, проблема в расширениях или кеше конкретного браузера.

2.2. Очистите кеш браузера

Кеш хранит устаревшие скрипты и стили, которые могут конфликтовать с медиа-загрузчиком WordPress. Горячие клавиши для полного сброса:

Горячие клавиши для очистки кеша браузера на Windows, Mac и Safari
  • Windows (Chrome, Firefox, Edge): Ctrl + Shift + Delete → «Очистить данные браузера»
  • Mac (Chrome, Firefox): Cmd + Shift + Delete
  • Safari: Shift + клик по кнопке перезагрузки

Либо зайдите в настройки браузера и удалите кеш вручную, путь зависит от браузера, но всегда находится в разделе «История» или «Конфиденциальность».

2.3. Переименуйте файл изображения

WordPress автоматически добавляет номер к дублирующимся именам (image-1.png, image-2.png), но иногда этот механизм глючит. Переименуйте файл перед загрузкой: избегайте спецсимволов, пробелов и кириллицы в имени. Хороший формат: product-banner-01.jpg.

2.4. Сожмите изображение

Размер файла может упираться в лимит хостинга. Даже если upload_max_filesize выставлен щедро, некоторые хостеры режут буферы на меньших значениях. Сожмите картинку: для JPEG, через Imagify или TinyPNG, для PNG, через Squoosh.

Интерфейс плагина сжатия изображений Imagify в WordPress

Попутно проверьте формат: если загружаете .png, попробуйте конвертировать в .jpg, и наоборот. Иногда проблема привязана к конкретному формату и версии PHP-библиотеки GD или Imagick.

2.5. Деактивируйте плагины и смените тему

Плагины безопасности, Wordfence, Solid Security, Sucuri, и оптимизации изображений могут перехватывать загрузку и вызывать конфликт. Временно отключите ВСЕ плагины и переключитесь на стандартную тему, Twenty Twenty-Five или любую другую default-тему. Проверьте загрузку. Заработало, включайте плагины по одному, чтобы найти виновника.

2.6. Увеличьте лимит памяти PHP

PHP-процесс обработки изображения потребляет память. Для Full HD-скриншота в JPEG может не хватить и 64 МБ. Добавьте в wp-config.php перед строкой /* That's all, stop editing! */:

1define( 'WP_MEMORY_LIMIT', '256M' );

2.7. Обновите версию PHP

На 2026 год WordPress рекомендует PHP 8.3 как минимальную версию, оптимально, PHP 8.4 или 8.5. На версиях 7.4 и ниже работа медиа-загрузчика не гарантирована. Путь в cPanel: раздел «Программное обеспечение» → «Выбрать версию PHP» → переключитесь на 8.4 или 8.5.

Выбор версии PHP в панели управления cPanel

2.8. Отключите ModSecurity

ModSecurity, межсетевой экран уровня веб-сервера, который иногда принимает загрузку изображения за атаку. Добавьте в .htaccess (в корне сайта):

1<IfModule mod_security.c>
2SecFilterEngine Off
3SecFilterScanPOST Off
4</IfModule>

Не помогло, уберите эти строки обратно: проблема не в ModSecurity.

2.9. Переключите WordPress с Imagick на GD Library

WordPress использует Imagick (если модуль установлен на сервере) или GD Library для обработки изображений. У Imagick выше качество, но он потребляет больше памяти. Если WP_MEMORY_LIMIT не помог, принудительно переключите WordPress на GD. Добавьте в functions.php активной темы:

1function wpb_image_editor_default_to_gd( $editors ) {
2 $gd_editor = 'WP_Image_Editor_GD';
3 $editors = array_diff( $editors, array( $gd_editor ) );
4 array_unshift( $editors, $gd_editor );
5 return $editors;
6}
7add_filter( 'wp_image_editors', 'wpb_image_editor_default_to_gd' );

После этого WordPress ставит GD Library первой в цепочке, а Imagick использует как fallback.

2.10. Установите Add From Server, альтернативный способ загрузки

Если HTTP-ошибка не уходит, а файл нужно загрузить срочно, загрузите его на сервер по FTP в любую папку и импортируйте в медиабиблиотеку через Add From Server. Плагин подхватывает файлы напрямую с файловой системы, в обход стандартного загрузчика WordPress, работают файлы любого размера, ограниченные только дисковым пространством тарифа.

2.11. Обратитесь к хостинг-провайдеру

Перепробовали всё, пишите в поддержку хостинга. Опишите ошибку, приложите скриншот, укажите версию PHP и WordPress. Часто проблема решается на стороне сервера: техподдержка правит php.ini, снимает блокировку ModSecurity или перезапускает PHP-FPM.

3. Исправьте ошибку «Missing a temporary folder»

Ошибка «Missing a temporary folder» блокирует не только загрузку изображений, но и установку плагинов и обновление WordPress. Причина: PHP не может найти или записать во временную директорию.

Решение, явно указать WordPress путь к temp-папке. Откройте wp-config.php и добавьте перед финальной строкой:

1define( 'WP_TEMP_DIR', dirname( __FILE__ ) . '/wp-content/temp/' );

Сохраните файл. Затем через FTP или cPanel File Manager создайте папку temp внутри /wp-content/ (если её нет). Права на папку, 755. Возвращайтесь в админку и пробуйте загрузку снова.

4. Поднимите лимит размера загружаемого файла

Ошибка «Uploaded file exceeds the upload_max_filesize directive» означает, что файл слишком велик для текущих настроек PHP. Три способа исправить, от простого к серверному.

4.1. Через.htaccess

Добавьте в .htaccess (корень сайта):

1php_value upload_max_filesize 256M

Если ошибка повторилась, добавьте следом:

1php_value post_max_size 256M
2php_value memory_limit 512M
3php_value max_input_time 180
4php_value max_execution_time 180

4.2. Через wp-config.php

Добавьте в wp-config.php перед финальной строкой:

1@ini_set( 'upload_max_filesize', '256M' );
2@ini_set( 'post_max_size', '256M' );

4.3. Через php.ini

Найдите php.ini на сервере, путь зависит от хостинга, обычно /etc/php/8.4/cli/php.ini или настраивается в cPanel (раздел «Select PHP Version» → «Switch to PHP Options»). Откройте, найдите директиву upload_max_filesize и замените значение:

1upload_max_filesize = 256M
2post_max_size = 256M

Сохраните и перезапустите PHP, через cPanel или командой в SSH. Если доступа к php.ini нет, обратитесь в поддержку хостинга.

5. Специфические решения для GoDaddy и DreamHost

GoDaddy

На shared-хостинге GoDaddy HTTP-ошибка часто связана с порядком библиотек обработки изображений. Добавьте в functions.php активной темы:

1add_filter( 'wp_image_editors', 'change_graphic_lib' );
2function change_graphic_lib( $array ) {
3 return array( 'WP_Image_Editor_GD', 'WP_Image_Editor_Imagick' );
4}

Код принудительно ставит GD Library первой, это решает большинство случаев HTTP-ошибки именно на GoDaddy.

DreamHost

На DreamHost ошибка обычно связана с конфликтом плагинов или тем. Первым делом деактивируйте все плагины и переключитесь на стандартную тему. Удалите неиспользуемые темы и плагины, они могут оставлять мёртвые хуки, мешающие загрузчику. Не помогло, обратитесь в поддержку DreamHost: у них кастомная серверная конфигурация, и техподдержка знает специфику.

Что делать, если ошибка повторяется снова и снова

Если вы прошли всю цепочку, а загрузка всё равно падает раз в неделю, проблема глубже, чем права доступа или лимит PHP. Скорее всего, виноват хостинг с жёсткими серверными ограничениями (дешёвый shared-тариф) либо криво написанный плагин, который перезаписывает настройки медиа-загрузчика при каждом обновлении.

Первым делом исключите плагины: отключите всё на сутки и последите за поведением загрузчика. За сутки ни одного сбоя, включайте плагины по одному с интервалом в день, пока не найдёте виновника.

Не нашли, меняйте хостинг. Серьёзно. Дешёвые shared-тарифы экономят на памяти PHP и подрезают буферы так, что никакие правки .htaccess не помогут. Для стабильной работы WordPress с медиафайлами нужен VPS или качественный managed-хостинг с memory_limit от 256M и max_execution_time от 120 секунд.

Альтернативный обходной путь, загружать изображения через FTP и импортировать через Add From Server. Медленнее, чем родной загрузчик, но работает на любом хостинге и не зависит от PHP-лимитов.

⁉️🤔 Частые вопросы

Почему ошибка загрузки возникает без видимых причин?

Хостинг-провайдеры регулярно обновляют серверное ПО: минорные патчи PHP, Apache, конфигурацию ModSecurity. Меняются пути, версии, настройки, и права доступа к /wp-content/uploads/ слетают. Вы ничего не трогали, а загрузка перестала работать. Решение: перевыставить права 744/755 на папку и 644 на файлы внутри /wp-content/uploads/ и проверить лимиты PHP.

Что делать, если ничего из статьи не помогло?

Включите WP_DEBUG в wp-config.php: define( 'WP_DEBUG', true ); и повторите загрузку. WordPress запишет конкретную ошибку в /wp-content/debug.log. Вы увидите точный PHP-фатал или warning: чаще всего, нехватка памяти (allowed memory size exhausted), недоступность временной папки (failed to open dir) или конфликт конкретного плагина. С этой информацией поддержка хостинга решит вопрос в разы быстрее.

Как загрузить очень большой файл, если хостинг не даёт поднять лимит?

Используйте FTP + плагин Add From Server. Загрузите файл на сервер вручную по FTP в папку /wp-content/uploads/import/ (или любую другую), затем через плагин импортируйте в медиабиблиотеку. Add From Server подхватывает файлы напрямую с файловой системы сервера, в обход HTTP-загрузчика и всех его лимитов. Работает для файлов любого размера, единственное ограничение: дисковое пространство тарифа. Для пакетной загрузки создайте папку /wp-content/uploads/bulk-import/ и заливайте туда сразу всё через FTP.

Можно ли навсегда предотвратить ошибку загрузки изображений?

Полностью исключить нельзя, но риск сводится к минимуму. Держите PHP на актуальной версии, 8.4 или 8.5 в 2026 году, memory_limit не ниже 256M. Не ставьте плагины безопасности с агрессивными настройками по умолчанию. Раз в полгода проверяйте права на /wp-content/uploads/. После каждого обновления ядра WordPress или PHP делайте тестовую загрузку изображения. Настроен автоматический бэкап, откат займёт 5 минут. И держите под рукой FTP-доступ: без него половина решений из этой статьи недоступна.

Обязательно ли использовать FTP для исправления прав доступа?

Нет. Альтернатива, File Manager в cPanel (или аналог вашего хостинга). Заходите в File Manager → /wp-content/ → правый клик по папке uploads → Change Permissions → выставляете 744. Логика та же, интерфейс чуть другой. cPanel File Manager работает с правами точно так же, как FTP-клиент: всё делается в браузере, отдельный софт не нужен. Для пользователей, которым FTP-клиент кажется сложным, это самый доступный способ исправить права за две минуты.

Ошибка загрузки исправлена, что дальше?

Вы прошли цепочку, загрузка работает. Теперь, профилактика, чтобы не возвращаться к этой проблеме через месяц. Три вещи, которые имеет смысл сделать сразу:

  • Запишите рабочие настройки. Те права (744/755), лимиты PHP (256M), версия PHP (8.4+), сохраните себе в заметки. При следующей миграции или обновлении сервера вы восстановите их за минуту, а не за час перебора.
  • Настройте мониторинг дискового пространства. Половина «внезапных» ошибок загрузки, это закончившееся место на диске. WordPress молча отказывает в записи, а вы гадаете. Бесплатные плагины вроде WP Health проверяют свободное место и присылают уведомление на почту до того, как диск заполнится.
  • Проверьте логи раз в месяц. /wp-content/debug.log (если включили WP_DEBUG) покажет зарождающуюся проблему задолго до того, как она станет блокирующей. Пара минут в месяц экономят часы внепланового ремонта.

Остались вопросы или столкнулись с нетипичным кейсом? Опишите ситуацию в комментариях, разберёмся.