利用Cache_Lite代替codeigniter中的cache功能

最近在做一个小项目,利用到了Codeigniter 这个框架,主要是看重他小巧、方便、快捷,文档齐全。在MVC处理上十分灵活。尤其是model模型,与Zend_Db_Table相比虽然简化,但是十分方便。

codeigniter的功能纵然强大,也有不足之处。其cache模式在于针对不同的uri就会生成cache文件,如果URL中参数不同,则cache文件就会不同,从而产生了漏洞。如果访问者构建自动生成URI,不断向服务器发起请求,就会瞬间产生大量的垃圾文件,导致系统文件臃肿。

参看CI中国论坛:脆弱的CI缓存系统,1天攻陷你的CI网站http://codeigniter.org.cn/forums/thread-1690-1-1.html

因此如果要用到cache功能就必须找到第三方的开发库。Pear中,Cache_Lite属于较为轻量级的缓存系统,且功能强大,可以作为CI原生cache的替代品,将其加入自定义的library文件即可完成。

步骤如下:

1. 下载Cache_Lite
http://download.pear.php.net/package/Cache_Lite-1.7.7.tgz
解压缩后,将Cache_Lite.php和Lite文件夹复制到 system/application/libraries中。并在Cache_Lite.php中加入:

if (!defined(’BASEPATH’)) exit(’No direct script access allowed’);

2. 在要使用Cache_Lite的Controller中,加入:

$ops = array(
‘cacheDir’ => BASEPATH.’/cache/’, //cache文件存储位置
‘lifeTime’ => 3600, //cache的有效期
);
// ;
$this->load->library(”Cache_Lite”,$ops,”cc”); //cc为Cache_Lite的别名

然后在要利用Cache的位置使用Cache_Lite自带的函数就可以拉。

如:读取缓存:$string = $this->cc->get($id);
生成缓存:$this->cc->save($outputString);

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

30 − 20 =