我正在使用MAMP在本地开发Cake
PHP 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
奇怪的是,/ tmp是777,tmp / cache是777,而tmp / cache / persistent是777(不要担心……服务器上不会是777!). tmp / cache / persistent中的文件本身是644 – 但我认为Cake正在创建和管理该文件,并且使用它所需的权限.
如果我只刷新页面,则错误消失(然后稍后重新出现).我没有做任何明确的缓存,所以这个东西就是Cake正在做它自动做的事情.
所以我的问题是:
a)Cake的自动缓存是如何工作的?它是否尝试在每次刷新页面时写入该文件,并且偶尔会失败一次?或者它只是尝试偶尔写入该文件,但每次尝试都失败?
b)如果它只是偶尔失败一次,我可以安全地忽略它吗?如果它每次尝试失败,我该如何解决?
在此先感谢您的帮助!
当与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_','prefix' => 'cake_model_','path' => CACHE . 'models' . DS,'mask' => 0666 ));