CakePHP 3.6缓存文件引擎的默认目录权限

时间:2019-02-07 20:34:03

标签: caching cakephp-3.0 file-permissions

我在我的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目录,但是删除它们后,它们将使用默认权限重新创建,因此,这不是最佳解决方法。

1 个答案:

答案 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()。或者在缓存引擎尝试创建文件夹之前自行创建文件夹,例如在您的引导程序中。