CodeIgniter 3缓存写入失败求助:缓存目录无生成文件
解决CodeIgniter 3缓存无法写入文件的问题
1. 排查APC驱动的可用性
你配置了adapter => 'apc'作为主缓存驱动,但APC扩展在Windows环境下支持性极差,多数Windows服务器默认未安装该扩展。如果APC驱动不可用,CodeIgniter可能无法正常切换到备份的file驱动,直接导致缓存操作失败。
- 执行
var_dump(extension_loaded('apc'));或查看phpinfo()输出,确认APC扩展是否安装启用。 - 若未安装APC,直接将主驱动改为
file测试:$this->load->driver('cache', array('adapter' => 'file'));
2. 明确指定缓存目录路径
你设置的$config['cache_path'] = '',虽然CodeIgniter会默认使用application/cache,但Windows下的路径解析可能存在问题,手动指定绝对路径更可靠:
// 指向application/cache目录,确保末尾带斜杠 $config['cache_path'] = APPPATH . 'cache/';
3. 处理phpspreadsheet对象的序列化问题
缓存驱动保存数据时会自动序列化内容,但phpspreadsheet生成的Spreadsheet对象可能包含无法序列化的资源(如临时文件句柄),导致缓存写入失败。可以将对象转为可序列化的二进制数据再缓存:
// 将电子表格转为字节流 $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($data); ob_start(); $writer->save('php://output'); $spreadsheetData = ob_get_clean(); // 缓存处理后的字节流 $this->cache->save($cacheKey, $spreadsheetData, 150);
4. 开启CI日志排查错误
在application/config/config.php中开启日志,查看缓存操作的具体错误信息:
$config['log_threshold'] = 2; // 记录错误与调试信息
查看application/logs下的日志文件,搜索cache相关条目,定位具体失败原因。
5. 单独验证file驱动功能
暂时完全禁用APC,仅使用file驱动测试基础功能:
$this->load->driver('cache', array('adapter' => 'file')); // 写入简单测试数据 $this->cache->save('test_key', 'test_content', 60);
如果此操作能生成缓存文件,说明问题出在APC驱动或phpspreadsheet对象的序列化上;若仍失败,需再次确认缓存目录的权限(比如IIS应用池用户是否拥有该目录的写入权限)。
内容的提问来源于stack exchange,提问作者owf
相关产品推荐
相关产品推荐

