Windows10 XAMPP环境下CakePHP1.74 tmp/cache文件夹fopen权限被拒问题
解决方案
你遇到的报错本质不是NTFS权限不足,是Windows 10的文件临时锁定机制和CakePHP 1.x旧版本的文件缓存写入逻辑冲突导致:系统或安全软件在缓存文件生成瞬间会短暂锁定文件进行扫描,旧版CakePHP没有重试逻辑,直接抛出权限报错,刷新页面时锁定已释放,所以运行恢复正常。具体可按以下步骤解决:
- 调整CakePHP文件缓存重试逻辑
打开报错指向的CORE\cake\libs\cache\file.php文件,修改第142行附近的fopen写入逻辑,增加3次重试间隔,避开临时锁定时间:$writeRetry = 3; $fileHandle = false; while($writeRetry > 0 && !$fileHandle) { $fileHandle = @fopen($cacheFilePath, 'wb'); if(!$fileHandle) { usleep(80000); // 等待80毫秒后重试 $writeRetry--; } } // 后续保留原有fopen失败的报错逻辑即可 - 添加缓存目录到安全软件排除项
Windows Defender的实时保护是最常见的锁定触发源,将C:\xampp\htdocs\epic\app\tmp整个目录加入排除列表即可:
打开Windows安全中心→病毒和威胁防护→病毒和威胁防护设置→管理设置→添加或删除排除项→选择上述tmp文件夹添加即可。如果有安装第三方安全软件,同样添加对应目录排除。 - 修改CakePHP缓存配置降低写入频率
编辑app\config\core.php中的缓存配置,延长缓存有效期减少文件写入次数,同时显式指定文件权限:Cache::config('default', array( 'engine' => 'File', 'duration' => 7200, // 缓存有效期改为2小时,按需调整 'mask' => 0777, 'prefix' => 'cake_' )); - 开发环境替换为内存缓存(可选)
直接安装PHP5.3对应版本的APC扩展,将缓存引擎修改为APC,完全规避文件写入锁定问题,无需修改核心代码。
内容的提问来源于stack exchange,提问作者Yung
相关产品推荐
相关产品推荐

