0

我在codeigniter中使用基于文件的缓存它成功地设置了缓存,但它无法清理它。

代码

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Tm extends CI_Controller {

public function index(){

    $this->load->driver('cache');

    if ($foo = $this->cache->file->get('foo2'))
        echo $foo.'<br />';
    else
        {
        echo 'Saving to the cache!<br />';
        $foo = 'foobarbaz! :D';
        $this->cache->file->save('foo2', $foo, 60);
        }
    if($this->cache->clean())
        echo "clearing cache ";
    else
        echo "Error clearing cache ";
    }
    
} 

第一个输出:

保存到缓存!

清除缓存

当我刷新它

胡说八道!:D

清除缓存

看起来函数在失败时也$this->cache->clean()总是返回true

4

1 回答 1

0

在编辑我自己的最后一条评论时,我意识到我犯了和你一样的错误——->fileclear()通话中失踪了。

Cache 类的默认适配器是 'dummy' 并且您没有将新适配器传递给初始化程序,因此调用$this->cache->clear()会尝试调用$this->cache->dummy->clear()而不是$this->cache->file->clear().

$this->cache->file->clear()加载库时,您必须显式调用或执行此操作:

$this->load->library('cache', array('adapter' => 'file'));

编辑:

CI_Cache_file如果它不能删除任何或所有带有缓存路径的文件,它仍然会返回 TRUE。它只是调用delete_files()文件助手,它不检查unlink(). 您无法解决这个问题,因为没有数据库中的文件删除事务。

于 2012-11-19T14:45:34.977 回答