Проблемы с очисткой кеша и прав доступа к каталогу кеша в проектах Symfony2 в Windows

Я использую Windows 10 и запускаю различные проекты Sf на разных версиях Symfony от 2.3 до 3.2. У меня были эти проблемы во всех них с незапамятных времен (также на Win 7). В некоторых проектах это постоянно, в других случайно - при очистке кеша все сходит с ума - иногда не может переименовать каталог, иногда не может удалить файл, иногда не может его открыть. Примеры:

[Symfony\Component\Debug\Exception\ContextErrorException] Warning: file_put_contents(H:\_Moje_dydy\Documents\Projekty\atm\src/var/cache/dev/classes.map): failed to open stream: Permission denied

Это очень распространено (но только в некоторых проектах!):

[Symfony\Component\Filesystem\Exception\IOException] Cannot rename "H:\_Moje_dydy\Documents\Projekty\friendly_score\src_rainfin\app\cache\de_" to "H:\_Moje_dydy\Documents\Projekty\friendly_score\src_rainfin\app\cache\dev".

В некоторых случаях помогает полная очистка каталога кеша с правами администратора. В некоторых нет, а в некоторых вообще невозможно (удаление содержимого каталога). Много раз, когда я не мог удалить каталог и просматривал разрешения NTFS для некоторых папок в каталоге кеша, я видел полный хаос, подобный этому:

введите здесь описание изображения

Обратите внимание на повторяющиеся записи для одних и тех же пользователей, множественные «специальные» права (у них внутри очень странные наборы разрешений, которые часто противоречат друг другу).

В некоторых «более тяжелых» случаях это не только мешало команде cache:clear, но и вообще ломало приложение. В большинстве этих случаев требовалось очень глубокое вмешательство, чтобы я мог просто удалить каталог кеша (некоторые подкаталоги имели настолько сумасшедшие разрешения, что даже будучи администратором, я не мог их удалить и должен был сначала смешаться с разрешениями).

Вот что я использую прямо сейчас:

  • Windows 10 (было и на Windows 7);
  • XAMPP с PHP 7.1 и Apache 2.4 (случалось и в более старых версиях с PHP 5.6 и 5.4);
  • Netbeans 8.2 как IDE (случалось и с предыдущими версиями);
  • cygwin для запуска команд CLI;
  • мерзавец

Мой основной вопрос: что так нелепо смешивается с этими разрешениями? Apache+PHP при создании кеша во время выполнения? Netbeans, даже несмотря на то, что он игнорирует каталоги кеша и журнала (теоретически - я специально не помещал их в список игнорирования в NB)? Git, даже эти каталоги игнорируются в каждом репо (довольно маловероятно)? Я, выполняя команды CLI через cygwin (тоже маловероятно)?

Я долго с этим боролся, безрезультатно...

У вас есть какие-нибудь идеи по этому поводу? Спасибо.


person KotBehemot    schedule 24.03.2017    source источник


Ответы (2)


у меня были похожие проблемы....
Пока я не перешел с xampp на laragon

Я знаю, это звучит странно, но в моем случае это решило все проблемы.

person Michał G    schedule 24.03.2017

Symfony предоставляет документацию по этим проблемам с разрешениями: http://symfony.com/doc/current/setup/file_permissions.html

Вы можете либо использовать umask(002) перед всем приложением, либо установить ACL. ACL и umask устанавливают права доступа по умолчанию для всех новых файлов.

person Amitsouko    schedule 27.03.2017
comment
Я понимаю, что папкам нужны достаточные разрешения для записи пользователем Apache. И это не проблема. Проблема в том, что даже если я установлю правильные разрешения для папки кеша, они будут перезаписаны и что-то полностью испортит. И я не знаю, что это за что-то. И док ничего не говорит об этом. - person KotBehemot; 31.03.2017
comment
setfacl решит ваши проблемы. Как сказано в документе, если вы сделаете setfacl -dRm ww-data:rwx your/folder, установите rwx права для пользователя ww-data. Параметр R означает рекурсивный. Параметр -d означает значение по умолчанию. Таким образом, все новые файлы и папки, созданные в вашей/папке, будут наследовать разрешения по умолчанию (в предыдущем случае www-data будут иметь разрешения rwx) - person Amitsouko; 31.03.2017