SplFileInfo :: openFile(/ app/tmp/cache/persistent/cake_core_cake_console _):无法打开流:/lib/.../FileEngine.php第293行中的权限被拒绝

pen*_*egg 21 cakephp cakephp-2.0 cakephp-2.1

我正在开发CakePHP 2项目.它最初从2.0.x开始,然后最近迁移到2.1.0.在整个开发过程中,我一直收到以下错误消息.

它不可预测地弹出页面顶部.它可能是我只是在查看不同的页面,甚至在我向数据库添加记录之后(但记录正确保存).

Warning:
SplFileInfo::openFile(/var/www/cake_prj/app/tmp/cache/persistent/cake_core_cake_console_): 
failed to open stream: 
Permission denied in 
     /var/www/cake_prj/lib/Cake/Cache/Engine/FileEngine.php on line 293
Run Code Online (Sandbox Code Playgroud)

我以递归方式将tmp文件夹的所有者和组设置为apache,并仍然收到该消息.另外,我然后递归地设置读取,写入和执行所有权限(chmod 777).错误消息仍然会弹出.

即使在更改了所有者,组和权限之后,相关文件仍然存在:

cake_prj/app/tmp/cache/persistent/cake_core_cake_console_
Run Code Online (Sandbox Code Playgroud)

将其所有者和组设置回root,并将其权限设置回默认值.

什么可能导致这个问题?有没有办法确保每次生成此文件时,它始终都是apache:具有读/写/执行权限的apache?

rtc*_*ner 26

您可以通过在core.php中为配置添加掩码来解决此问题

Cache::config('default', array(
    'engine' => 'File',
    'mask' => 0666,
));
Run Code Online (Sandbox Code Playgroud)

  • 我认为这应该在bootstrap.php而不是core.php中 (2认同)

nIc*_*IcO 15

那里有一个错误报告http://cakephp.lighthouseapp.com/projects/42648/tickets/2172但它被认为不是一个错误.

我个人注意到的是,当您cake在控制台中使用脚本时,可能会修改某些文件所有者(例如,创建一个bake).然后,修改后的文件属于您在控制台中使用的用户.

这是否意味着你cake在成为root时打电话?或者你有任何调用Cake shell脚本的root cron作业?

Personaly我现在习惯了chmod在使用cake脚本后将整个tmp文件夹内容返回给apache用户,它似乎可以防止出现警告.


Cod*_*der 7

我没有设置给tmp/cache目录中的每个人提供读/写访问权限,而是这样做:

chgrp -R www-data app/tmp
chmod -R g+rw app/tmp 
find app/tmp -type d -exec chmod g+s {} \;
Run Code Online (Sandbox Code Playgroud)

将目录组设置为Apache用户然后设置setgid位将允许您确保在该目录中创建的文件获得正确的组权限,而不管用户运行shell脚本的是什么.这也允许您排除对"其他"用户的读/写权限.