我在我的CakePHP 3.6应用程序中使用Cake\Cache\Engine\FileEngine
进行缓存。我想定义缓存目录权限。我曾尝试在缓存配置中使用“掩码”,但它只会影响缓存正在创建的文件,而不影响目录。
似乎缓存目录权限总是设置为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
目录,但是删除它们后,它们将使用默认权限重新创建,因此,这不是最佳解决方法。
答案 0 :(得分:0)
缓存引擎使用775
创建文件夹:
但是,这不是最终模式,mkdir()
将对此应用当前的umask,可能是022
。 IIRC mkdir()
将有效地执行此操作以找出实际模式:
mode & ~umask & 0777
这将导致755
,即rwxr-xr-x
。
在其他地方,CakePHP暂时取消设置当前的umask以避免这种情况,不确定为什么引擎也不会在这里也使用umask()
(可能的多线程问题在这里更普遍,IDK),您可能希望在GitHub处进行澄清以解决问题。
作为(临时)解决方法,您可以使用create a custom/extended cache engine覆盖FileEngine::_setKey()
和FileEngine::_active()
并从那里应用chmod()
。或者在缓存引擎尝试创建文件夹之前自行创建文件夹,例如在您的引导程序中。