0

0

cache.func.php

php中文网

php中文网

发布时间:2016-06-23 14:34:43

|

972人浏览过

|

来源于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;
}
function cache_common()
{
global $db;
$data = array();
$result = $db->query("select `module`,`name`,`path`,`url`,`iscore`,`version` from `".db_pre."module` where `disabled`=0");
//取出模块表中的基本数据,module 为module的英文名,name为中文名,path为它的所在目录,url和path数据一样子,也是表示目录,iscore判断是否为内置核心模块,version为版本号
while($r = $db->fetch_array($result))
{
if(!$r['path']) $r['path'] = $r['module'] == 'phpcms' ? '' : $r['module'].'/'; //设置模块当没有指定路径时,指向phpcms
if(!$r['url']) $r['url'] = $r['module'] == 'phpcms' ? '' : $r['module'].'/'; // //设置模块当没有指定路径时,指向url
$data[$r['module']] = $r;//value=array $r
}
$db->free_result($result);
$cache['module'] = $data; //给值给cahe的module变量,值包含path,url此外应该为 所有模块 path/url
$data = array();
$result = $db->query("select * from `".db_pre."model` where `disabled`=0"); //加载内容模版`disabled`=0", 意思为没有设置关闭的 model表如下
//no. 字段 类型 null key 默认值|说明
//1 modelid tinyint(3) unsigned no pri | 模型id auto_increment
//2 name varchar(30) no | 模型名称
//3 description varchar(255) no | 描述
//4 tablename varchar(20) no | 保存表名
//5 itemname varchar(10) no | 项目名称
//6 itemunit varchar(10) no | 项目单位
//7 workflowid tinyint(3) unsigned no 0 | 工作流方案
//8 template_category varchar(30) no | 栏目首页模板
//9 template_list varchar(30) no | 栏目列表页模板
//10 template_show varchar(30) no | 内容页模板
//11 template_print varchar(30) no | 打印页模板
//12 ishtml tinyint(1) unsigned no 0 | 是否生成html
//13 category_urlruleid tinyint(1) unsigned no 0 | 栏目url规则
//14 show_urlruleid tinyint(1) unsigned no 0 | 内容页url规则
//15 enablesearch tinyint(1) unsigned no 1 |
//16 ischeck tinyint(1) unsigned no 1 |
//17 isrelated tinyint(1) unsigned no 1 |
//18 disabled tinyint(1) unsigned no 0 | 禁用
//19 modeltype tinyint(1) unsigned no 0 | 类型
while($r = $db->fetch_array($result))
{
$data[$r['modelid']] = $r; //取所有的model_id
}
$db->free_result($result);
$cache['model'] = $data; //给cache变量
$data = array();
$result = $db->query("select `catid`,`module`,`type`,`modelid`,`catname`,`style`,`image`,`catdir`,`url`,`parentid`,`arrparentid`,`parentdir`,`child`,`arrchildid`,`items`,`ismenu` from `".db_pre."category` where 1 order by `listorder`,`catid`");
//自己可以在机器上,跑一下如上sql语句,结果是
//cartoary 表结构 字段 类型 null key 默认值|说明
//1 catid smallint(5) unsigned no pri | 栏目id auto_increment
//2 module varchar(15) no mul | 模块
//3 type tinyint(1) unsigned no 0 | 栏目类型
//4 modelid tinyint(3) unsigned no 0 | 模型id
//5 parentid smallint(5) unsigned no 0 | 上级栏目id
//6 arrparentid varchar(255) no | 所有上级栏目id
//7 child tinyint(1) unsigned no 0 | 是否有子栏目
//8 arrchildid mediumtext no | 所有子栏目id
//9 catname varchar(30) no | 栏目名称
//10 style varchar(5) no | 样式
//11 image varchar(100) no | 栏目图片
//12 description mediumtext no | 描述
//13 parentdir varchar(100) no | 父目录
//14 catdir varchar(30) no | 栏目目录
//15 url varchar(100) no | 链接
//16 content mediumtext no | 单网页内容
//17 items mediumint(8) unsigned no 0 | 信息数
//18 hits int(10) unsigned no 0 | 点击数
//19 setting mediumtext no | 设置
//20 listorder smallint(5) unsigned no 0 | 排序
//21 ismenu tinyint(1) unsigned no 1 | 在导航显示
//也就是生成了目录树
while($r = $db->fetch_array($result))
{
$r['url'] = url($r['url']); // url varchar(100) no | 链接 如生成后,显示为 /module_目录/index.html
$data[$r['catid']] = $r; //目录id,这些在形成首页head里的那个导行非常有用,我测试了下就是从这里调用的数据,如果导航数据有错,可以调整这里
}
$db->free_result($result);
$cache['category'] = $data; //给cache变量,方便以后调用
$data = array();
$result = $db->query("select `typeid`,`module`,`name`,`style`,`typedir`,`url` from `".db_pre."type` where 1 order by `listorder`,`typeid`");
// 1 link 默认分类
// 2 error_report 错字
// 3 error_report 无效url
// 0 好像为内部栏目类别
while($r = $db->fetch_array($result))
{
$data[$r['typeid']] = $r;
}
$db->free_result($result);
$cache['type'] = $data;
$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;
$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; //module的url规则 2008默认为it/product/2006/1010/1_2.html格式
$data = array();
$r = $db->get_one("select `setting` from `".db_pre."module` where `module`='phpcms'");
//sql查出来,如下数据,这是网站配置的基本信息,在后台可以设置,写到这个表里
//------------------------------------------------------------------------
$setting = $r['setting'];
eval("\$phpcms = $setting;");
if($phpcms['siteurl'] =='') $phpcms['siteurl'] = site_url; // 'siteurl' => 'http://127.0.0.1/phpcms/',
$cache['phpcms'] = $phpcms;
cache_write('common.php', $cache); //将上面生成的 $cache变量,写到common.php中,也就是形成了data/cache/common.php
return $cache;
}
function cache_module()
{
//此函数的目的,是生成单独页的配置信息,把前面setting关于的一些网站基本信息,与 模块的信息组成一个新的数组,并写到 /dada/cache/module_xxx.php
global $db;
$data = array();
$result = $db->query("select `module`,`name`,`path`,`url`,`iscore`,`version`,`publishdate`,`installdate`,`updatedate`,`setting` 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']) //当url为空值时,给module值给它,从数据库来看,这两个值通常是一样子的
{
$r['url'] = $r['module'] == 'phpcms' ? '' : $r['module'].'/';
$db->query("update `".db_pre."module` set `url`='$r[url]' where module='$r[module]' limit 1");
}
if($r['setting'])
{
$setting = $r['setting'];
eval("\$setting = $setting;"); //将setting重新给一个数据变量
unset($r['setting']); //清空数组r里的setting变量,
if(is_array($setting)) $r = array_merge($r, $setting);
//这一句要注意,把setting数组合并$r模块里的关于`module`,`name`,`path`,`url`,`iscore`,`version`,`publishdate`,`installdate`,`updatedate`信息,方便后面调用
}
cache_write('module_'.$r['module'].'.php', $r); //生成 module_xxx.php,这里跑完这一句后,就生成了,最新的模块配置的信息,里面是最基础的数据并没有网站内容
}
$db->free_result($result);
}
function cache_model() //生成模形数据
{
cache_table(db_pre.'model', '*', '', '', 'modelid', 1);
}
function cache_category() //生成目录数据
{
cache_table(db_pre.'category', '*', '', '', 'listorder,catid', 1);
}
function cache_type() //生成栏目类别数据
{
cache_table(db_pre.'type', '*', '', '', 'listorder,typeid', 1);
}
function cache_area() //生成地区数据
{
cache_table(db_pre.'area', '*', '', '', 'listorder,areaid', 1);
}
function cache_member_group() //生成用户权限组数据
{
cache_table(db_pre.'member_group', '*', '', '', 'groupid', 1);
cache_table(db_pre.'member_group', '*', 'name', '', 'groupid', 0);
}
function cache_role() //生成用户角色数据 如admin,栏目编辑等
{
cache_table(db_pre.'role', '*', 'name', '', 'listorder,roleid');
}
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);
}
function cache_status() //状态数据
{
global $db;
$array = array();
$result = $db->query("select * from `".db_pre."status` order by `status` asc");
while($r = $db->fetch_array($result))
{
$array[$r['status']] = $r['name'];
}
cache_write('status.php', $array);
return $array;
}
function cache_workflow() //工作流
{
global $db;
$array = array();
$result = $db->query("select * from `".db_pre."workflow` order by `workflowid` asc");
while($r = $db->fetch_array($result))
{
$array[$r['workflowid']] = $r['name'];
}
cache_write('workflow.php', $array);
return $array;
}
function cache_formguid()
{
cache_table(db_pre.'formguide', '*', '', '', 0);
}
//生成表的cache文件函数
//本函数会将数据库中,按主键id生成数据表的cache文件,典型例子是 /data/cache/下category_*.php 的文件
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; //设置order顺序
$limit = $number ? "limit 0,$number" : ''; //设置跑多少条数
$result = $db->query("select $fields from `$table` $where order by $order $limit"); //sql
$table = preg_replace("/^".db_pre."(.*)$/", "http://www.cnblogs.com/igaofen/admin/file://0.0.0.1/", $table); //取table名去掉了表前缀
while($r = $db->fetch_array($result))
{
if(isset($r['setting']) && !empty($r['setting'])) //因为 一行数据中 setting是一个数组,所以要把它另拿出来,作为变量再与前面的merge
{
$setting = $r['setting'];
eval("\$setting = $setting;");
unset($r['setting']);
if(is_array($setting)) $r = array_merge($r, $setting); //merge两个组组
}
$key = $r[$keyfield];
$value = $valfield ? $r[$valfield] : $r;
$data[$key] = $value;
if($iscacheline) cache_write($table.'_'.$key.'.php', $value); //生成cache文件,格式为 表名_主键id.php $iscacheline=1表示生成cache否则不开启
}
$db->free_result($result);
cache_write($table.'.php', $data); //生成表的全部数据 如/data/caceh/category.php 可以看一下数据结构就会明白了
}
?>

本文来自csdn博客:http://blog.csdn.net/guwenzhong/archive/2009/03/05/3959505.aspx

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

46

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

178

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

51

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

92

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

102

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

227

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

532

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

171

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号