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)
| 归档时间: |
|
| 查看次数: |
4641 次 |
| 最近记录: |