Почему не загружаются файлы в WordPress и как исправить ошибку прав доступа

Почему не загружаются файлы в WordPress и как исправить ошибку прав доступа


Введение

При загрузке изображений или других файлов через админку 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 записывать в неё файлы.

Как работает загрузка

  1. Браузер отправляет файл на сервер.
  2. PHP сохраняет его во временную директорию (обычно /tmp).
  3. WordPress пытается переместить файл в wp-content/uploads/ГГГГ/ММ.
  4. Если у процесса 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 из синхронизации и при необходимости исправлять права автоматически.

Комментарии

Пока нет комментариев. Станьте первым!

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *