Ошибка записи файлов на сервере ломает загрузку изображений, создание документов, кэш, экспорт отчетов и работу CMS. Внешне это может выглядеть как пустой экран, 500 ошибка или сообщение Permission denied.
Проверять нужно не только chmod, но и владельца процесса, группу, путь, свободное место, временную папку и ограничения PHP или панели хостинга.
Коротко: что сделать
- Проверить точный путь, куда идет запись
- Посмотреть владельца PHP-FPM или веб-сервера
- Проверить права папки и родительских директорий
- Проверить свободное место и inode
- Посмотреть error_log сайта
Основные причины
У таких сбоев редко бывает одна универсальная причина. Надежнее идти от факта к факту: где ошибка проявляется, какие данные проходят через систему, что изменилось перед поломкой и на каком шаге цепочка перестает работать.
- Папка принадлежит другому пользователю
- Нет права записи у процесса PHP или nginx/apache
- Диск или inode закончились
- open_basedir запрещает доступ к пути
- SELinux или AppArmor блокирует запись
Пошаговая диагностика
Диагностику лучше проводить на одном воспроизводимом примере. Так проще увидеть не общий шум, а конкретное место, где интерфейс, сервер, интеграция или внешняя служба начинают вести себя неправильно.
- Выполнить ls -la для проблемной папки и родителя
- Проверить df -h и df -i
- Создать тестовый файл от имени пользователя сайта
- Проверить php.ini и open_basedir
- Посмотреть системные логи безопасности
Как исправить проблему
Исправление должно закрывать первопричину, а не только маскировать симптом. Если затронуты доступы, платежи, данные клиентов или серверные настройки, сначала сделайте резервную копию и проверьте правку на тестовом сценарии.
- Назначить корректного владельца и группу
- Выдать минимально нужные права на запись
- Очистить диск, временные файлы и старые бэкапы
- Исправить путь загрузки в настройках сайта
- Настроить правила SELinux/AppArmor при необходимости
Безопасный план решения
Не ставьте 777 на весь сайт. Выясните, какой пользователь запускает PHP, и выдайте права только на нужную папку: uploads, cache, tmp или exports.
Чего не стоит делать
- Не менять владельца всего сервера рекурсивно без проверки пути
- Не давать запись в директории с исполняемым кодом без необходимости
- Не чистить диск удалением неизвестных системных файлов
- Не скрывать ошибки записи от пользователя
Что подготовить перед исправлением
- Текст ошибки из логов
- Путь папки, куда не пишется файл
- Тип сервера: VPS, shared hosting, Docker
- CMS или framework сайта
FAQ
Почему chmod 777 не помог?
Проблема может быть в владельце, open_basedir, SELinux, заполненном диске или неправильном пути.
Что такое inode?
Это количество файловых объектов. Диск может иметь свободные гигабайты, но не иметь свободных inode для новых файлов.
Какие права ставить на uploads?
Обычно достаточно владельца пользователя сайта и прав вроде 755/775 для папок, но схема зависит от веб-сервера.
Когда стоит обратиться за помощью
Обратиться стоит, если сайт рабочий, на сервере несколько пользователей или ошибка связана с загрузкой документов и изображений клиентов.
Итог
Проверьте владельца, права, путь, диск и ограничения PHP. Если нужно безопасно починить запись файлов на сервере, пишите в Telegram @rabotator_support.