Разрешение каталога CakePHP 3.6 по умолчанию для обработчика файлов кэша - PullRequest
0 голосов
/ 07 февраля 2019

Я использую Cake\Cache\Engine\FileEngine для кэша в моем приложении CakePHP 3.6.Я хотел бы определить разрешения каталогов кеша .Я попытался использовать «маску» в конфигурации Cache, но это влияет только на файлы, которые создает кэш, а не на каталоги.

Похоже, что разрешения для каталога кэша всегда установлены на drwxr-xr-x, что делает егопроблема для меня, потому что в таком случае только владелец может удалять файлы в этих каталогах.Мне нужно, чтобы каталог был доступен для записи по группе, а не только по владельцу.

Вопрос: Можно ли определить, какие права доступа к файлам должны создаваться каталогами кэша с помощью CakePHP?

Моя текущая конфигурация:

'_cake_model_' => [
    'className' => 'Cake\Cache\Engine\FileEngine',
    'prefix' => 'myapp_cake_model_',
    'path' => CACHE . 'models/',
    'serialize' => true,
    'duration' => '+1 years',
    'url' => env('CACHE_CAKEMODEL_URL', null),
    'mask' => 0666,
],

/ tmp / кэш-листинг:

drwxr-xr-x 2 www-data   www-data   4096 Feb  7 12:15 models/
-rw-rw-rw- 1 www-data   www-data 396020 Feb  7 12:07 myapp_cake_routes_route_collection
drwxr-xr-x 2 www-data   www-data   4096 Feb  7 12:05 persistent/

Примечание: Я понимаю, что могу вручную chmod каталоги, но они будут воссозданы с разрешениями по умолчанию после их удаления, так что это не лучшее исправление.

1 Ответ

0 голосов
/ 08 февраля 2019

Механизм кэширования использует 775 для создания папок:

Однако, это не последний режим, mkdir() будет применять ваш текущий umask к этому, который, вероятно, равен 022.IIRC mkdir() будет эффективно делать это для определения фактического режима:

mode & ~umask & 0777

, что приведет к 755, т.е. rwxr-xr-x.

В других местах CakePHP временно сбрасывает текущийumask, чтобы избежать этого, не знаю, почему именно движок не использует umask() и здесь (возможно, здесь могут быть более распространенные проблемы с многопоточностью, IDK), вы можете открыть проблему в GitHub для пояснения.

В качестве (временного) обходного пути вы можете, например, создать собственный / расширенный механизм кэширования , который переопределяет FileEngine::_setKey()и FileEngine::_active() и применяется chmod() оттуда.Или, может быть, создайте папки самостоятельно, прежде чем механизм кэширования попытается их создать, например, в вашей начальной загрузке ...

...