CakePHP写入缓存时偶然出现错误警告

jos*_*ing 6 caching cakephp cakephp-2.2

我正在使用MAMP在本地开发CakePHP 2.2站点.每隔一段时间,我就会得到一个或多个与此类似的警告,关于无法写入一个或多个缓存文件:

Warning: SplFileInfo::openFile(/Applications/MAMP/htdocs/mywebsite/www/app/tmp/cache/persistent/myapp_cake_core_cake_console_en-au): failed to open stream: Permission denied in /Applications/MAMP/htdocs/mywebsite/www/lib/Cake/Cache/Engine/FileEngine.php on line 313
Run Code Online (Sandbox Code Playgroud)

奇怪的是,/ tmp是777,tmp/cache是​​777,而tmp/cache/persistent是777(不要担心......服务器上不会是777!).tmp/cache/persistent中的文件本身是644 - 但我认为Cake正在创建和管理该文件,并且使用它所需的权限.

如果我只刷新页面,则错误消失(然后稍后重新出现).我没有做任何明确的缓存,所以这个东西就是Cake正在做它自动做的事情.

所以我的问题是:

a)Cake的自动缓存是如何工作的?它是否尝试在每次刷新页面时写入该文件,并且偶尔会失败一次?或者它只是尝试偶尔写入该文件,但每次尝试都失败?

b)如果它只是偶尔失败一次,我可以安全地忽略它吗?如果它每次尝试失败,我该如何解决?

在此先感谢您的帮助!

nIc*_*IcO 14

当与Apache不同的进程在缓存中创建文件时,可能会发生这种情况.例如,当您运行shell命令时可能就是这种情况,因为您可能以与Apache不同的用户身份执行此操作.

默认情况下,文件高速缓存创建具有权限的文件,只允许创建文件的用户修改它们,但这可以通过在core.php中的高速缓存配置中设置掩码来修复:

Cache::config('_cake_core_', array(
    'engine' => $engine,
    'prefix' => 'cake_core_',
    'path' => CACHE . 'persistent' . DS,
    'serialize' => ($engine === 'File'),
    'duration' => $duration,
    'mask' => 0666
));

Cache::config('_cake_model_', array(
    'engine' => $engine,
    'prefix' => 'cake_model_',
    'path' => CACHE . 'models' . DS,
    'serialize' => ($engine === 'File'),
    'duration' => $duration,
    'mask' => 0666
));
Run Code Online (Sandbox Code Playgroud)

  • 好的,这似乎有效.对其他人的说明:您还需要删除现有的缓存文件,以便蛋糕以666权限重新创建它们.否则他们将保持664权限. (4认同)