caching - CakePHP 3.6 缓存文件引擎的默认目录权限
问题描述
我Cake\Cache\Engine\FileEngine
在我的 CakePHP 3.6 应用程序中使用缓存。我想定义缓存目录权限。我曾尝试在缓存配置中使用“掩码”,但它只影响缓存正在创建的文件,而不影响目录。
看起来缓存目录权限总是设置为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
创建目录,但是在删除它们后会使用默认权限重新创建它们,所以这不是最好的解决方法。
解决方案
缓存引擎775
用于创建文件夹:
- https://github.com/cakephp/cakephp/blob/3.7.3/src/Cache/Engine/FileEngine.php#L390
- https://github.com/cakephp/cakephp/blob/3.7.3/src/Cache/Engine/FileEngine.php#L433
但是,这不是最终模式,mkdir()
将在此应用您当前的 umask,这可能是022
. IIRCmkdir()
将有效地执行此操作以计算实际模式:
mode & ~umask & 0777
这将导致755
,即rwxr-xr-x
。
在其他地方,CakePHP 会暂时取消设置当前的 umask 以避免这种情况,不确定为什么引擎也不umask()
在这里使用(也许可能的多线程问题在这里会更普遍,IDK),你可能想在GitHub 上打开一个问题为了澄清。
作为(临时)解决方法,您可以例如创建一个自定义/扩展缓存引擎,该引擎覆盖FileEngine::_setKey()
并从那里FileEngine::_active()
应用。chmod()
或者也许在缓存引擎尝试创建文件夹之前自己创建文件夹,例如在您的引导程序中......
推荐阅读
- linux - 在文件中多次替换单词之间的字符串
- python - 在 Julia 中,将逗号插入整数以进行打印,如 Python 3.6+
- sql - SQL 查询以查找前 80% 的贡献
- c# - C# 编写包含未知数量的同名节点的 XML 文件
- json - 快速格式化 JSON:JSON 写入中的类型无效 (OS_dispatch_data)
- oauth - In OpenID Connect, is it okay to pass an id token instead of an access token to a resource server for authorization?
- qt - QML 简单程序未运行
- haskell - Eta 转换以严格的语言改变语义
- c - C中sizeof计算char a[]和char *a有什么区别?
- java - Spring Integration:读取托管在 HTTP 上的 csv 文件