位置: 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视频教程)

  • 荣耀30青春版的后置像素是多少(荣耀30青春版的处理器相当于骁龙多少)

    荣耀30青春版的后置像素是多少(荣耀30青春版的处理器相当于骁龙多少)

  • 手机音量为什么打不开(手机音量为什么突然变低了)

    手机音量为什么打不开(手机音量为什么突然变低了)

  • 钉钉可以看屏幕吗(钉钉可以看屏幕使用时间吗)

    钉钉可以看屏幕吗(钉钉可以看屏幕使用时间吗)

  • 苹果mq6k2ch是什么型号(苹果手机mq6k2是什么版本)

    苹果mq6k2ch是什么型号(苹果手机mq6k2是什么版本)

  • 定时说说别人能看出来吗(定时说说别人看的出来吗)

    定时说说别人能看出来吗(定时说说别人看的出来吗)

  • 大疆无人机遥控器怎么关机(大疆无人机遥控器与无人机配对)

    大疆无人机遥控器怎么关机(大疆无人机遥控器与无人机配对)

  • 能看到对方朋友圈是不是没删我(能看到对方朋友圈但不能评论)

    能看到对方朋友圈是不是没删我(能看到对方朋友圈但不能评论)

  • mae136是红米几(mae136是红米几电池)

    mae136是红米几(mae136是红米几电池)

  • 酷狗豪华vip和音乐包有什么区别(酷狗豪华VIP和音乐包开哪个)

    酷狗豪华vip和音乐包有什么区别(酷狗豪华VIP和音乐包开哪个)

  • amda107300相当于i几(amd a107300)

    amda107300相当于i几(amd a107300)

  • 苹果手机屏幕一会暗一会亮什么原因(苹果手机屏幕一碰就亮怎么关闭)

    苹果手机屏幕一会暗一会亮什么原因(苹果手机屏幕一碰就亮怎么关闭)

  • 微信头像怎么加五星红旗(微信头像怎么加边框自己做)

    微信头像怎么加五星红旗(微信头像怎么加边框自己做)

  • 网易云识别音乐在哪(网易云识别音乐能识别应用中播放的吗)

    网易云识别音乐在哪(网易云识别音乐能识别应用中播放的吗)

  • 京东怎么取消退货(京东怎么取消退货申请上门取件)

    京东怎么取消退货(京东怎么取消退货申请上门取件)

  • 路由器bloem是什么设备(路由器中broadlink是什么)

    路由器bloem是什么设备(路由器中broadlink是什么)

  • 如何永久注销微信账号(如何永久注销微软microsoft 账户)

    如何永久注销微信账号(如何永久注销微软microsoft 账户)

  • excel表格换行怎么换(excel表格换行怎么做)

    excel表格换行怎么换(excel表格换行怎么做)

  • 怎么调整图片分辨率(怎么调整图片分辨率手机)

    怎么调整图片分辨率(怎么调整图片分辨率手机)

  • ipad3不能下载微信怎么办(ipad935无法下载微信)

    ipad3不能下载微信怎么办(ipad935无法下载微信)

  • 手机扩内存后有影响吗(手机扩内存有用吗)

    手机扩内存后有影响吗(手机扩内存有用吗)

  • shevan是什么牌子(shein是什么牌子)

    shevan是什么牌子(shein是什么牌子)

  • 手机怎样退出金山文档(怎么退出金兰)

    手机怎样退出金山文档(怎么退出金兰)

  • 华为p30pro关机键在哪(华为p30pro关机键怎么是红色)

    华为p30pro关机键在哪(华为p30pro关机键怎么是红色)

  • ipad怎么以旧换新(苹果平板ipad如何以旧换新)

    ipad怎么以旧换新(苹果平板ipad如何以旧换新)

  • 芒果tv绑定的手机号不用了怎么办(芒果tv绑定的手机号不用了登录不上)

    芒果tv绑定的手机号不用了怎么办(芒果tv绑定的手机号不用了登录不上)

  • Win10怎么在防火墙里开放端口?(win10怎么防火墙白名单)

    Win10怎么在防火墙里开放端口?(win10怎么防火墙白名单)

  • 关税完税价格是指什么意思
  • 其他债权投资的汇兑差额计入什么科目
  • 购买地瓜
  • 总账和总分类账的区别图片
  • 间接持股数怎么计算
  • 残值要不要做分录
  • 企业合并固定资产增值的规定
  • 平销返利企业所得税处理
  • 个税中的住房租金扣除什么意思
  • 异地预缴增值税后本地怎么申报
  • 发票收到以后必须查验吗
  • 买机票返钱
  • 在建工程转固后又发生成本
  • 预收房款发票开具需要注意哪些?
  • 买房报销
  • 季报所得税可以预交吗
  • 施工单位项目部牌子
  • 增值税确认平台一直显示该网站出现问题
  • 关于增值税发票开具的最新规定
  • 请问什么是全员安全生产责任制
  • 一般纳税人是什么等级
  • 所得税费用可以抵减利润吗
  • 收到收入怎么做分录
  • 风险控制措施包括哪5个方面
  • 公司支付的赔偿款计入什么会计科目
  • 生产型企业进口退税政策
  • 收到退回增值税和附加税怎么处理
  • win11开机蓝屏怎么解决
  • 用后期进项抵欠怎么做账
  • 给客户赠送的礼物叫什么
  • 营改增的会计分录
  • phpunicode
  • 旅行社专票开票内容的规定
  • 不得领购使用增值税专用发票
  • 顺流交易合并抵消
  • php验证码扭曲效果怎么做
  • php图片上添加文字的方法
  • 低值易耗品摊销表格
  • 增值税发票可以作废重新开吗
  • zend framework手册
  • vue引入网络js
  • 高新技术企业认定八大条件
  • mysql备份原理
  • 航天金税盘发票冲红怎么操作
  • 为什么实收资本是贷方
  • 土地利息可以作为土增扣除吗
  • 入伙退伙协议要盖章吗
  • sql server触发器的作用
  • sqlserver 数据集字符集种类
  • 小规模纳税人税额怎么算
  • 公司帐户可以转法人私人账户吗
  • 应付账款的余额表示什么
  • 因管理不善的材料怎么办
  • 售后租回交易的表述
  • 非成品油发票能做进项吗
  • 委托加工物资贷方
  • 城市综合配套
  • 差旅费属于其他费用吗
  • 技术咨询服务开票代码
  • 其他应收款如何计提坏账准备
  • 费用设置的明细科目
  • sql server 2005如何使用
  • 通过SQLSERVER重启SQLSERVER服务和计算机的方法
  • windows无法打开添加打印机
  • macbook开机壁纸怎么设置
  • mac系统如何切换中文
  • 虚拟机里安装centos7
  • 苹果mac怎么下载
  • windows7脚本编程和命令行指南
  • win8应用商店无法连接网络
  • win10重置系统快捷键
  • win7显卡属性在哪
  • win10打开iis管理器命令
  • win8系统咋样
  • html中的td
  • python金融大数据 全流程详解
  • jquery自定义函数
  • android键盘aosp
  • 进项税额转出应交税费吗
  • 加工中心钻孔进给
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设