Проблема: Ошибка каталога кеша Symfony 3.1
При использовании Symfony 3.1 на сервере CentOS 7.2 с Nginx 1.8.0 и PHP 7.0.31 приложение выдает следующую ошибку при попытке загрузить страницу:
PHP Fatal error: Uncaught RuntimeException: Cannot write to cache directory (/var/www/app.local/var/cache/prod)
Сведения об окружении:
- Symfony: 3.1
- ОС: CentOS 7.2.511
- Веб-сервер: Nginx 1.8.0
- PHP: 7.0.31
- Структура каталогов:
/var/www/app.local/ ├── var/ │ ├── cache/ │ └── logs/
- Каталог
/var/www/app.local/var/cache
имеет следующие права доступа:drwxrwxrwx. 4 user user 4096 Sep 13 08:37 cache
Наблюдения:
- Лог ошибок показывает:
FastCGI sent to stderr: "PHP message: PHP Fatal error: Uncaught RuntimeException: Cannot write to cache directory (/var/www/app.local/var/cache/prod)
- Выполнение команды
ls -ld /var/www/app.local/var/cache
подтверждает, что права доступа установлены как 777. - SELinux включен (команда
getenforce
возвращаетEnforcing
).
Ключевые вопросы:
- Почему Symfony продолжает выдавать ошибку «Cannot write to cache directory», даже если права на каталог установлены как 777?
- Может ли политика SELinux или конфигурация PHP-FPM препятствовать записи в каталог?
- Как можно решить эту проблему, не отключая SELinux полностью?
Давайте обсудим возможные причины и пути решения!
2 ответа
1. Разрешения для пользователя PHP-FPM
Убедитесь, что служба PHP-FPM работает от имени пользователя, который имеет доступ к директории. Проверьте конфигурацию PHP-FPM в файле /etc/php-fpm.d/www.conf
или /etc/php-fpm.conf
:
user = nginx group = nginx
Исправьте права доступа, назначив директорию правильному пользователю:
chown -R nginx:nginx /var/www/app.local/var/cache
2. Решение проблем с SELinux
На системах CentOS SELinux может блокировать доступ PHP к определённым директориям. Для диагностики выполните:
sudo cat /var/log/audit/audit.log | grep denied
Для исправления обновите контекст безопасности:
sudo chcon -R -t httpd_sys_rw_content_t /var/www/app.local/var/cache
Или отключите SELinux, если он не требуется, следуя инструкции Vultr: Отключение SELinux на CentOS 7.
3. Проверка параметра open_basedir
Настройка open_basedir
в PHP может ограничивать доступ к директориям. Проверьте настройку:
php -i | grep open_basedir
Чтобы добавить директорию Symfony в разрешённые пути, измените файл конфигурации PHP (php.ini
):
open_basedir = "/var/www/app.local/:/tmp/:/var/cache/"
4. Очистка кеша Symfony
После исправления конфигурации очистите кеш вручную:
php bin/console cache:clear --env=prod
Эти шаги помогут устранить проблему с директориями кеша в Symfony.
1. Разрешения для пользователя PHP-FPM
Убедитесь, что служба PHP-FPM работает от имени пользователя, который имеет доступ к директории. Проверьте конфигурацию PHP-FPM в файле /etc/php-fpm.d/www.conf
или /etc/php-fpm.conf
:
user = nginx group = nginx
Исправьте права доступа, назначив директорию правильному пользователю:
chown -R nginx:nginx /var/www/app.local/var/cache
2. Решение проблем с SELinux
На системах CentOS SELinux может блокировать доступ PHP к определённым директориям. Для диагностики выполните:
sudo cat /var/log/audit/audit.log | grep denied
Для исправления обновите контекст безопасности:
sudo chcon -R -t httpd_sys_rw_content_t /var/www/app.local/var/cache
Или отключите SELinux, если он не требуется, следуя инструкции Vultr: https://docs.vultr.com/disabling-selinux-on-centos-7
3. Проверка параметра open_basedir
Настройка open_basedir
в PHP может ограничивать доступ к директориям. Проверьте настройку:
php -i | grep open_basedir
Чтобы добавить директорию Symfony в разрешённые пути, измените файл конфигурации PHP (php.ini
):
open_basedir = "/var/www/app.local/:/tmp/:/var/cache/"
4. Очистка кеша Symfony
После исправления конфигурации очистите кеш вручную:
php bin/console cache:clear --env=prod
Эти шаги помогут устранить проблему с директориями кеша в Symfony.