|
本帖最后由 zhengfeity 于 2011-10-12 15:49 编辑
上次发的帖子 有点不太好 我这次改了以后算一个最后的解决方案吧
首先搞清楚CI的机制 首先访问 找缓存文件 然后找不到在检查 生成 济南做网站五角星网络科技提供
先来说说
第一 假设我们有很多文档,比如1000000 很庞大的数字 放在一个目录下会很卡 即使不卡 这么文档同时更新缓存也是不小的事 文档的内容一般都是 更改的时候显示也就更改了 所以这个文档的缓存应该设成永久!仿照DZ头像存储的路径我这写了一个路径保存方案000/000/000/缓存文件
第二 分页同上 但是分页还有个不同之处 更新一篇文档 有1000页 那么这1000个文件都得更新 更新1000个文档负担还是比较小的
所以文章类别控制在1000页 之内 大于1000页的话 按1000算 站在SEO的角度 这个列表必须更新 而文档被收录的话可以不存在于列表中 只要百度能打开你的已收录的内页 那么就基本不会掉
第三 既然是智能缓存 那么肯定有缺陷某些控制器不想被缓存 比如后台 那么我就可以把这个文件夹 移除缓存的范围
改进CI页面缓存 $this->output->cache(0); 这个是永不清空缓存文档
目录结构是 控制器名 方法名 层层递进 当碰到数字的话结束 也就是后面的000/000/000/缓存文件
下面贴点代码 system/croe/output.php
PHP复制代码 if ($this->cache_expiration >= 0 && isset($CI) && ! method_exists($CI, '_output'))
{
$this->_write_cache ($output);
} 复制代码
这一行是在_display 更改就是把大于0 改成大于等于0
PHP复制代码 $uri = $CI->uri->uri_string();
$check = explode("/",$uri);
require('./settings/siteset.php');
if($check[0] == $config['adminmenu'])
{
return;exit();
} 复制代码
这段代码就是屏蔽 不缓存的目录 自己可以更改
PHP复制代码 //扩展缓存路径
function _cache_path ($url,$uri_string)
{
$check = explode("/",$uri_string);
require('./settings/siteset.php');
if($check[0] == $config['adminmenu'])
{
return;exit();
}
foreach($check as $key)
{
if(!is_numeric($key))
{
$url = $url.$key."/";
$this->_mkdir_dir ($url);
}
else
{
$url = $this->_calculate ($url,$id);
return $url;exit();
}
}
return $url;
}function _mkdir_dir ($url)
{
if(!is_dir($url))
{
if(@!mkdir($url))
{
log_message ('debug', "缓存目录无法创建");exit();
}
}
}
function _calculate ($url,$id)
{
return $url.$this->_get_dir ($url,$id);
}
function _get_dir ($url,$id)
{
$str1 = $id/1000000000;
$str = floor($str1);
$a1 = str_pad($str,3,"0",STR_PAD_LEFT );
$this->_mkdir_dir ($url.$a1);
$id1 = $id%1000000000; //第一层余数
$str2 = $id1/1000000;
$str = floor($str2);
$a2 = str_pad($str,3,"0",STR_PAD_LEFT );
$id2= $id1%1000000; //第二层余数
$this->_mkdir_dir ($url.$a1."/".$a2);
$str3 = $id2/1000;
$str = floor($str3);
$a3 = str_pad($str,3,"0",STR_PAD_LEFT );
$this->_mkdir_dir ($url.$a1."/".$a2."/".$a3);
return $a1."/".$a2."/".$a3."/";
} 复制代码
然后自己更改下_write_cache() 和_display_cache 的目录 要不生成目录不对
我这里是这样写的
PHP复制代码 $cache_path = $this->_cache_path ($cache_path,$CI->uri->uri_string());
$cache_path .= md5($uri); 复制代码PHP复制代码 $cache_path = $this->_cache_path ($cache_path,$URI->uri_string);
$filepath = $cache_path.md5($uri); 复制代码
删除缓存 获取到这路径 找到删除即可
文档更新的时候 只更新自己的缓存 如果是目录更新的话的 那么就把这个栏目对应的列表的缓存 删除即可
|
|