Введение
При загрузке изображений или других файлов через админку WordPress иногда появляется ошибка: «Загруженный файл не удалось переместить в wp-content/uploads/ГГГГ/ММ». В этой статье разберём причину и способ решения.
Текст ошибки
Типичные формулировки:
- «Загруженный файл не удалось переместить в wp-content/uploads/2026/02»
- «The uploaded file could not be moved to wp-content/uploads/…»
Ошибка означает, что PHP получил файл во временную папку, но не может переместить его в целевую директорию загрузок.
Причина: права доступа
Чаще всего проблема в том, что владелец и права папки wp-content/uploads не позволяют процессу PHP записывать в неё файлы.
Как работает загрузка
- Браузер отправляет файл на сервер.
- PHP сохраняет его во временную директорию (обычно
/tmp). - WordPress пытается переместить файл в
wp-content/uploads/ГГГГ/ММ. - Если у процесса PHP нет прав на запись в эту папку — операция не выполняется и появляется ошибка.
rsync">Типичный сценарий: деплой через rsync
На практике ошибка часто возникает после деплоя через rsync или похожие инструменты:
- Разработка идёт на Mac или другом ПК.
- Деплой копирует файлы на сервер через
rsync. rsyncсохраняет владельца и группу исходных файлов (например,501:staffна Mac).- На сервере PHP-FPM или Apache работает от другого пользователя —
www-data,www-root,nginxи т.п. - В итоге папка
uploadsпринадлежит «разработчику», а не веб-серверу — PHP не может в неё писать.
Как найти пользователя PHP
Нужно понять, под каким пользователем выполняется PHP на вашем хостинге. Варианты:
1. Через SSH
# Создаём тестовый файл
echo '<?php echo exec("whoami"); ?>' > info.php
# Открываем в браузере: https://ваш-сайт.ru/info.php
# Или через CLI:
php -r "echo posix_getpwuid(posix_geteuid())['name'];"
php-fpm">2. Через конфиг PHP-FPM
Если используется PHP-FPM, пользователь задаётся в пуле. Пример конфига:
[dekan.pro]
user = www-root
group = www-root
В этом случае PHP работает от пользователя www-root.
3. Для Apache (mod_php)
Обычно используется пользователь www-data или тот, что указан в User в конфигурации Apache.
Решение: исправить права
Шаг 1: Узнать пользователя PHP
Допустим, это www-root (или www-data на вашем хостинге).
uploads">Шаг 2: Изменить владельца папки uploads
# Подключаемся по SSH
ssh user@ваш-сервер
# Устанавливаем владельца (замените www-root на вашего пользователя)
sudo chown -R www-root:www-root /var/www/.../wp-content/uploads
# Права: папки 775, файлы 664
sudo find /var/www/.../wp-content/uploads -type d -exec chmod 775 {} \;
sudo find /var/www/.../wp-content/uploads -type f -exec chmod 664 {} \;
Шаг 3: Проверить родительские каталоги
Директория wp-content должна быть доступна для обхода (execute) — обычно хватает прав 755. Если доступ блокируется, PHP не сможет попасть в uploads.
Предотвращение проблемы при деплое
Чтобы ошибка не возвращалась после каждого деплоя:
uploads-iz-sinhronizatsii">1. Исключить uploads из синхронизации
Пользовательские загрузки не должны перетираться деплоем. В rsync добавьте исключение:
rsync -avz \
--exclude 'wp-content/uploads' \
./ user@server:/path/to/site/
2. Исправлять права после деплоя
Добавьте в скрипт деплоя команду смены владельца (на случай, если uploads всё же синхронизируются или создаются заново):
#!/bin/bash
# ... rsync ...
if [ $? -eq 0 ]; then
echo "Восстановление прав на uploads..."
ssh user@server "chown -R www-root:www-root /path/to/site/wp-content/uploads"
echo "✓ Деплой завершён."
fi
Другие возможные причины
Лимиты PHP
Проверьте в php.ini:
upload_max_filesize— максимальный размер одного файлаpost_max_size— должен быть не меньшеupload_max_filesize
Тemporary-директория
Если upload_tmp_dir недоступна или заполнена, загрузка может не сработать. Убедитесь, что /tmp (или указанная папка) доступна для записи процессу PHP.
Disk quota
На shared-хостинге может быть исчерпана квота дискового пространства. Проверьте свободное место.
Заключение
Ошибка «Загруженный файл не удалось переместить» чаще всего связана с правами доступа: папка uploads принадлежит не тому пользователю, под которым работает PHP. Решение — выставить корректного владельца (chown) и права (chmod), а при деплое исключать uploads из синхронизации и при необходимости исправлять права автоматически.

