cache.func.php

Jun 23, 2016 pm 02:34 PM

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

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄) 11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄) Mar 03, 2025 am 10:49 AM

11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄)

Laravel의 플래시 세션 데이터로 작업합니다 Laravel의 플래시 세션 데이터로 작업합니다 Mar 12, 2025 pm 05:08 PM

Laravel의 플래시 세션 데이터로 작업합니다

Laravel Back End : Part 2, React가있는 React 앱 구축 Laravel Back End : Part 2, React가있는 React 앱 구축 Mar 04, 2025 am 09:33 AM

Laravel Back End : Part 2, React가있는 React 앱 구축

Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Mar 12, 2025 pm 05:09 PM

Laravel 테스트에서 단순화 된 HTTP 응답 조롱

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 Mar 14, 2025 am 11:42 AM

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Mar 13, 2025 pm 12:08 PM

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트

라 라벨에서 알림 라 라벨에서 알림 Mar 04, 2025 am 09:22 AM

라 라벨에서 알림

2025 PHP 상황 조사 발표 2025 PHP 상황 조사 발표 Mar 03, 2025 pm 04:20 PM

2025 PHP 상황 조사 발표

See all articles