位置: IT常识 - 正文

phpcms v9缓存文件是怎样生成的(php文件缓存类)

编辑:rootadmin
phpcms v9缓存文件的生成方法:首先打开“cache.func.php”文件;然后通过“cache_all()”方法调用多个缓存函数来生成缓存即可,如“cache_common”函数、“cache_table”函数等等。

推荐整理分享phpcms v9缓存文件是怎样生成的(php文件缓存类),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php cache缓存,php cache缓存,phpcms更新缓存 文件,php ob缓存,phpcms更新缓存 文件,php的缓存文件是什么格式,php自带缓存,php自带缓存,内容如对您有帮助,希望把文章链接给更多的朋友!

phpcms v9缓存文件是怎样生成的?

这篇文章介绍phpcms的缓存结构

我并没有做深入的学习,但是phpcms的想法上却是有他的过人之处,太令人折服了,这里分享phpcms缓存的一中实现方案

/include/cache.func.php

这里最先主要是定义了一些phpcms的缓存函数,phpcms的缓存分为,表缓存,模型缓存,模型字段缓存,还有模块缓存,首先这些都是基于表的缓存的。

phpcms v9缓存文件是怎样生成的(php文件缓存类)

最开始有一个函数

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`,`ismenu`,`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.phpfunction cache_category(){cache_table(DB_PRE.'category', '*', '', '', 'listorder,catid', 1);}

缓存类别表生成路径

../data/cache/type_typeid.phpfunction 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.phpfunction cache_member_group(){cache_table(DB_PRE.'member_group', '*', '', '', 'groupid', 1);cache_table(DB_PRE.'member_group', '*', 'name', '', 'groupid', 0);}//缓存角色表//生成路径:../data/cache/role_roleid.phpfunction cache_role(){cache_table(DB_PRE.'role', '*', 'name', '', 'listorder,roleid');}//缓存作者表//生成路径:../data/cache/author_authorid.phpfunction 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);}

PHP中文网,大量的免费PHPCMS教程,欢迎在线学习!

本文链接地址:https://www.jiuchutong.com/zhishi/310149.html 转载请保留说明!

上一篇:利用Python的Matplotlib库进行数据可视化(python.mat)

下一篇:帝国cms怎么百度自动提交(帝国cms视频教程)

  • 淘宝商城购物(淘宝商城 天猫)(淘宝商城购物车)

    淘宝商城购物(淘宝商城 天猫)(淘宝商城购物车)

  • excel横向打印不全怎么调整(excel横向打印不全怎么办)

    excel横向打印不全怎么调整(excel横向打印不全怎么办)

  • 手机进水了怎么处理(手机进水了怎么处理比较好)

    手机进水了怎么处理(手机进水了怎么处理比较好)

  • 充电仓充电时耳机要不要拿出(充电仓充电时耳机可以拿出吗)

    充电仓充电时耳机要不要拿出(充电仓充电时耳机可以拿出吗)

  • 微信怎么设置语音通话免打扰(微信怎么设置语言)

    微信怎么设置语音通话免打扰(微信怎么设置语言)

  • matebook14怎么下载软件(matebook14怎么下载ps)

    matebook14怎么下载软件(matebook14怎么下载ps)

  • 抖音的喜欢里为什么会有隐藏的无效视频(抖音喜欢里为什么会多出视频)

    抖音的喜欢里为什么会有隐藏的无效视频(抖音喜欢里为什么会多出视频)

  • 微信显示对方未添加你为朋友啥意思(微信显示对方未添加好友但是能聊天)

    微信显示对方未添加你为朋友啥意思(微信显示对方未添加好友但是能聊天)

  • 微信朋友圈只有一条横线是什么意思(微信朋友圈只有点开才能看到)

    微信朋友圈只有一条横线是什么意思(微信朋友圈只有点开才能看到)

  • 加qq群要发短信是为什么(加qq群要发短信验证)

    加qq群要发短信是为什么(加qq群要发短信验证)

  • 抖音收不到私信是怎么回事(抖音收不到私信也发不出去)

    抖音收不到私信是怎么回事(抖音收不到私信也发不出去)

  • mate30pro是什么马达(华为mate30pro系列)

    mate30pro是什么马达(华为mate30pro系列)

  • 电脑开机几分钟就关机是什么原因(电脑开机几分钟就黑屏主机还正常)

    电脑开机几分钟就关机是什么原因(电脑开机几分钟就黑屏主机还正常)

  • 刚开通黄钻可以取消吗(黄钻开通后可以马上取消么)

    刚开通黄钻可以取消吗(黄钻开通后可以马上取消么)

  • 苹果手机facetime通话是什么意思(苹果手机facetime通话收费吗)

    苹果手机facetime通话是什么意思(苹果手机facetime通话收费吗)

  • 爱奇艺只有声音没有图像怎么回事(爱奇艺只有声音没有画面怎么办)

    爱奇艺只有声音没有图像怎么回事(爱奇艺只有声音没有画面怎么办)

  • 2+32g和3+32g有什么区别(2+32g和3+16g)

    2+32g和3+32g有什么区别(2+32g和3+16g)

  • 小米cc9e手机自带快充吗(小米cc9手机自动开关机怎么设置)

    小米cc9e手机自带快充吗(小米cc9手机自动开关机怎么设置)

  • 什么是抽样设计(什么抽样设计简单,可节省时间与费用)

    什么是抽样设计(什么抽样设计简单,可节省时间与费用)

  • 苹果播客删除有影响吗(苹果播客删了怎么重新下不了)

    苹果播客删除有影响吗(苹果播客删了怎么重新下不了)

  • 隔空投送失败是为什么(隔空投送失败是什么回事)

    隔空投送失败是为什么(隔空投送失败是什么回事)

  • 淘宝怎么看消费多少(淘宝怎么看消费总额)

    淘宝怎么看消费多少(淘宝怎么看消费总额)

  • 华为手机录屏如何不要显示顶部时间(华为手机录屏如何录制系统声音)

    华为手机录屏如何不要显示顶部时间(华为手机录屏如何录制系统声音)

  • 手机图片保存了找不到(手机保存了图片找不到去哪里找)

    手机图片保存了找不到(手机保存了图片找不到去哪里找)

  • 花椒直播如何快速升级(花椒直播如何快速认证)

    花椒直播如何快速升级(花椒直播如何快速认证)

  • 芒果二维码在哪能找到(芒果二维码在哪里)

    芒果二维码在哪能找到(芒果二维码在哪里)

  • 税负率的计算公式举例说明
  • 所得税报表的营业成本包括管理费用吗
  • 农产品是零税率还是免税税率
  • 核定征收变更查账征收利润怎么办
  • 一次性开票分期确认收入的税务文件是什么
  • 抵账房好不好
  • 应交税费会计科目借贷方向
  • 转让土地使用权怎么交增值税
  • 产品保修发生的维修费计入什么科目
  • 调增教育经费如何做账
  • 其他应交款和应交税费
  • 代理进口产品需要什么手续
  • 工业印花税核定比例
  • 税务局买税控盘需要的资料
  • 并购重组协议样本
  • 重点税源表怎么自动取数
  • 小规模季报利润表本月金额和本年累计金额
  • 增值税普通发票几个点
  • 其他应收款无法收回的会计分录
  • 印花税未计提可以下月补提吗
  • 增值税税率为6%的是什么服务
  • 长期股权投资用交印花税吗
  • 房租发票税金谁承担
  • 产品配件属于什么会计科目
  • 银行认购公司债券的条件
  • 联想Lenovo ThinkPad X13 Gen1
  • w10关闭
  • 收到退回款项
  • 医生规培生补贴每年多少钱
  • 代扣代缴的增值税可以作为进项税抵扣吗
  • windows 搜索工具
  • 进货折扣是怎么计算
  • 鸿蒙系统怎么开启OTG
  • 对公账户转库存现金对方科目怎么填
  • PHP:Memcached::delete()的用法_Memcached类
  • 应付股利在资产负债表哪个科目
  • 自己搭建网站怎么赚钱
  • 管理费用属于损益类吗
  • 取得海关专用缴款书的会计分录
  • 应交消费税涉及哪些情况
  • php上传多文件
  • 子公司破产对母公司是利好还是利空
  • phpcms api
  • 刘亦菲生日当天发素颜照
  • 电脑自学网
  • 企业所得税算法例题解析
  • 番茄开发票属于蔬菜吗?
  • 差额征税小规模纳税人免税销售额栏次
  • 资产负债表没有
  • 食堂员工私自拿东西怎么办
  • 合适的库存产品包括
  • 预付账款余额在贷方为
  • 待抵扣进项税额什么意思
  • 增资扩股对原股东的影响
  • 销售费用和管理费用的税前扣除
  • 预付账款是属于什么类
  • 小加工厂怎么开发票
  • 企业年初借的
  • 如何正确设置会员账号
  • mysql数据库技术介绍
  • sql解析框架
  • windows 地址解析命令
  • winsock2
  • xp主题设置
  • win7系统开启无线服务
  • fsck.mode
  • win10更新已经下载好了能删除吗
  • 用linux搭建服务器
  • 基于JAVAscrip的课程设计源代码
  • python获取当前地址
  • jquery和angularjs的区别
  • android推送权限
  • python图片批量重命名
  • 出口企业的增值税怎么算
  • 事前监督的名词解释
  • 鉴证服务是指什么
  • 2021河南税务政策
  • 国税局地税局
  • 税务工作者发展现状
  • 成都国税网上办税服务厅
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设