您现在的位置是:首页 > cms教程 > phpcms教程phpcms教程
phpcmsv9缓存文件是怎么生成的
袁修纯2025-05-05phpcms教程已有人查阅
导读这篇文章介绍phpcms的缓存结构我并没有做深入的学习,但是phpcms的想法上却是有他的过人之处,太令人折服了,这里分享phpcms缓存的一中实现方案/include/cache.func.php
这篇文章介绍phpcms的缓存结构我并没有做深入的学习,但是phpcms的想法上却是有他的过人之处,太令人折服了,这里分享phpcms缓存的一中实现方案/include/cache.func.php
这里先主要是定义了一些phpcms的缓存函数,phpcms的缓存分为,表缓存,模型缓存,模型字段缓存,还有模块缓存,首先这些都是基于表的缓存的。
最开始有一个函数
首先 头一个函数 cache_common
大家可以看下面的注释,是将 前缀名_model,前缀名_category ,前缀名_ module,前缀名,前缀名_type,前缀名_area,等等写入到$CACHE数组的对应下表之中 (比如model 表的数据$CACHE["model"]=$arr,$arr为phpcms_model表的数据)
这里先主要是定义了一些phpcms的缓存函数,phpcms的缓存分为,表缓存,模型缓存,模型字段缓存,还有模块缓存,首先这些都是基于表的缓存的。
最开始有一个函数
function cache_all()
{
@set_time_limit(600);
cache_common();
cache_module();
cache_model();
cache_category();
cache_area();
cache_type();
cache_member_group();
cache_role();
cache_author();
cache_keyword();
cache_copyfrom();
cache_pos();
cache_status();
cache_workflow();
tags_update();
return TRUE;
}
这个函数就调用一大堆的缓存函数来生成缓存的。首先 头一个函数 cache_common
大家可以看下面的注释,是将 前缀名_model,前缀名_category ,前缀名_ module,前缀名,前缀名_type,前缀名_area,等等写入到$CACHE数组的对应下表之中 (比如model 表的数据$CACHE["model"]=$arr,$arr为phpcms_model表的数据)
function cache_common()
{
global $db;
$data = array();
$result = $db->query("SELECT `module`,`name`,`path`,`url`,`iscore`,`version` FROM `".DB_PRE."module` WHERE `disabled`=0");
while($r = $db->fetch_array($result))
{
if(!$r['path']) $r['path'] = $r['module'] == 'phpcms' ? '' : $r['module'].'/';
if(!$r['url']) $r['url'] = $r['module'] == 'phpcms' ? '' : $r['module'].'/';
$data[$r['module']] = $r;
}
$db->free_result($result);
$CACHE['MODULE'] = $data;
//以上是将对应的模块写入$CACHE;
$data = array();
$result = $db->query("SELECT * FROM `".DB_PRE."model` WHERE `disabled`=0");
while($r = $db->fetch_array($result))
{
$data[$r['modelid']] = $r;
}
$db->free_result($result);
$CACHE['MODEL'] = $data;
$data = array();
//以上是对应的 model表里的内容写入数组$CACHE;
$result = $db->query("SELECT `catid`,`module`,`type`,`modelid`,`catname`,`style`,`image`,`catdir`,`url`,`parentid`,`arrparentid`,`parentdir`,`child`,`arrchildid`,`items`,`citems`,`pitems`,`i enu`,`letter` FROM `".DB_PRE."category` WHERE 1 ORDER BY `listorder`,`catid`");
while($r = $db->fetch_array($result))
{
$r['url'] = url($r['url']);
$data[$r['catid']] = $r;
}
$db->free_result($result);
$CACHE['CATEGORY'] = $data;
//以上是将所有的栏目写入$CACHE数组
$data = array();
$result = $db->query("SELECT `typeid`,`modelid`,`module`,`name`,`style`,`typedir`,`url` FROM `".DB_PRE."type` WHERE 1 ORDER BY `listorder`,`typeid`");
while($r = $db->fetch_array($result))
{
$data[$r['typeid']] = $r;
}
$db->free_result($result);
$CACHE['TYPE'] = $data;
//以上是将所有的 类别表里的数据写入$CACHE
$data = array();
$result = $db->query("SELECT `areaid`,`name`,`style`,`parentid`,`arrparentid`,`child`,`arrchildid` FROM `".DB_PRE."area` WHERE 1 ORDER BY `listorder`,`areaid`");
while($r = $db->fetch_array($result))
{
$data[$r['areaid']] = $r;
}
$db->free_result($result);
$CACHE['AREA'] = $data;
//所有的地区表写入$CACHE;
$data = array();
$result = $db->query("SELECT `urlruleid`,`urlrule` FROM `".DB_PRE."urlrule` WHERE 1 ORDER BY `urlruleid`");
while($r = $db->fetch_array($result))
{
$data[$r['urlruleid']] = $r['urlrule'];
}
$db->free_result($result);
$CACHE['URLRULE'] = $data;
//将所有的url规则写入缓存
$data = array();
$r = $db->get_one("SELECT `setting` FROM `".DB_PRE."module` WHERE `module`='phpcms'");
$setting = $r['setting'];
eval("\$PHPCMS = $setting;");
if($PHPCMS['siteurl'] =='') $PHPCMS['siteurl'] = SITE_URL;
$CACHE['PHPCMS'] = $PHPCMS;
//最后调用cache_write方法将所有的数组写入common.php 位置/date/cache/common.php根据系统变量慧有所改动
cache_write('common.php', $CACHE);
return $CACHE;
}
phpcms表缓存的实现方式主要是:利用一个叫cache_table函数$table是要缓存的表名,$fileds 是查询的字段名字,默认为 ' * ',$where sql语句中的where 子句,$order 排序, $isline是否开启字段缓存默认为不开启,如果开启表字段缓存和表缓存将同时进行
function cache_table($table, $fields = '*', $valfield = '', $where = '', $order = '', $iscacheline = 0, $number = 0)
{
global $db;
$keyfield = $db->get_primary($table);
$data = array();
if($where) $where = " WHERE $where";
if(!$order) $order = $keyfield;
$limit = $number ? "LIMIT 0,$number" : '';
$result = $db->query("SELECT $fields FROM `$table` $where ORDER BY $order $limit");
$table = preg_replace("/^".DB_PRE."(.*)$/", "", $table);
while($r = $db->fetch_array($result))
{
if(isset($r['setting']) && !empty($r['setting']))
{
$setting = $r['setting'];
eval("\$setting = $setting;");
unset($r['setting']);
if(is_array($setting)) $r = array_merge($r, $setting);
}
$key = $r[$keyfield];
$value = $valfield ? $r[$valfield] : $r;
$data[$key] = $value;
if($iscacheline) cache_write($table.'_'.$key.'.php', $value); //表字段缓存
}
$db->free_result($result);
cache_write($table.'.php', $data) ;// 表缓存
}
将数据数组写入对应的缓存文件,以上这个函数就是判断下常量CACHE_PATH是否存在默认是data/cache的路径然后用file_put_contents 将缓存的数据写入到对应的cachefile中
function cache_write($file, $array, $path = '')
{
if(!is_array($array)) return false;
$array = "<?php \nreturn ".var_export($array, true).";\n?>";
$cachefile = ($path ? $path : CACHE_PATH).$file;
$strlen = file_put_contents($cachefile, $array);
@chmod($cachefile, 0777);
return $strlen;
}
至于其他的可以参照以上的方法进行添加,大家可以查查看对应的cache.func.php
//缓存模型表
function cache_model()
{
cache_table(DB_PRE.'model', '*', '', '', 'modelid', 1);
}
//缓存分类表生成文件路径是../data/cachecategory_catid.php
function cache_category()
{
cache_table(DB_PRE.'category', '*', '', '', 'listorder,catid', 1);
}
缓存类别表生成路径
../data/cache/type_typeid.php
function cache_type()
{
cache_table(DB_PRE.'type', '*', '', '', 'listorder,typeid', 1);
}
//缓存地区列表
生成路径:../data/cache/area_areaid.php
function cache_area()
{
cache_table(DB_PRE.'area', '*', '', '', 'listorder,areaid', 1);
}
//缓存用户组表
//生成路径:../data/cache member_grounp_group_id.php
function cache_member_group()
{
cache_table(DB_PRE.'member_group', '*', '', '', 'groupid', 1);
cache_table(DB_PRE.'member_group', '*', 'name', '', 'groupid', 0);
}
//缓存角色表
//生成路径:../data/cache/role_roleid.php
function cache_role()
{
cache_table(DB_PRE.'role', '*', 'name', '', 'listorder,roleid');
}
//缓存作者表
//生成路径:../data/cache/author_authorid.php
function cache_author()
{
cache_table(DB_PRE.'author', '*', 'name', '', 'listorder,authorid', 0, 100);
}
function cache_keyword()
{
cache_table(DB_PRE.'keyword', '*', 'tag', '', 'listorder,usetimes', 0, 100);
}
function cache_copyfrom()
{
cache_table(DB_PRE.'copyfrom', '*', '', '', 'listorder,usetimes', 0, 100);
}
function cache_pos()
{
cache_table(DB_PRE.'position', '*', 'name', '', 'listorder,posid', 0);
}
本文标签:
很赞哦! ()
相关教程
图文教程
phpcmsv9发不了文章的原因及解决方法
phpcmsv9前台会员中心在线投稿显示“栏目禁止投稿”,在线投稿不能发布文章错误提示:栏目禁止投稿关于这个报错,先想到的是栏目的投稿权限没有开启,所以去查看了
phpcms首页调用内页文章内容的写法示例
其实使用phpcms在首页列表页调用某篇单个文章内容的解决方法还是比较多的,我们可以不用采用程序自动调用,而是直接把内容复制过来。但是如何是反复操作比较多的话
phpcms邮箱设置步骤方法
phpcms邮箱的设置方法:首先在域名dns解析里设置邮箱mx解析;然后设置成员邮箱及管理员邮箱;接着在后台依次打开“设置”→“邮箱设置”→“基本设置”;最后打开“邮箱配置
phpcms新建模型的步骤方法
phpcms 怎么新建模型?登录PHPCMS后台,选择管理内容(顶部导航)--模型管理(左侧导航最下面)选择添加模型,弹出窗口,按照你的需求填写,这里我写测试模型,点击确定保存
相关源码
-
(自适应响应式)蓝色律师事务所法务团队网站pbootcms模板为律师事务所和法律服务机构打造的专业网站模板,展现法律专业性与权威性,手工编写标准DIV+CSS代码,结构清晰优化,确保高效运行,自动适配电脑、平板和手机等各类设备,提供更好浏览体验查看源码 -
(自适应响应式)HTML5建筑工程公司建筑集团网站模板下载基于PbootCMS内核开发的响应式建筑行业网站模板,为建筑工程公司、建筑集团等企业打造,通过简洁大气的设计风格展现企业专业形象。查看源码 -
(自适应)工业机械制造设备网站pbootcms模板下载为机械制造、工业设备类企业设计,特别适合各类机械设备、生产线、工业自动化产品展示。采用响应式技术,确保在不同设备上都能清晰展示机械产品的技术参数和细节特点。查看源码 -
(自适应响应式)高端珠宝首饰奢侈品pbootcms模板下载本模板为珠宝首饰及奢侈品行业打造,采用PbootCMS内核开发,具备卓越的视觉表现力与商业转化能力。自适应设计确保在手机端呈现产品细节,后台数据实时同步,助您高效展示钻石查看源码 -
html5响应式pbootcms模板新闻资讯博客网站源码该模板采用PbootCMS内核开发,专为新闻资讯类网站打造,同时具备高度行业适配性--只需替换图文内容即可快速转型为企业官网、行业门户等各类站点。查看源码 -
帝国cms7.5大型游戏资讯门户网站源码免费下载本模板基于帝国CMS7.5内核开发,为大型游戏资讯门户网站设计。模板自带响应式手机版,适配多种终端设备。内容架构针对游戏行业特点优化,支持游戏资讯、评测、攻略等内容类型的发布与管理。查看源码
| 分享笔记 (共有 篇笔记) |
