phpcms 的多寡库类和phpcms 的文件缓存的完成

复制代码 代码如下:
**
* @表明: 文件缓存输出
* @参数: $cachefile => cache文件(相对路线卡塔尔
* @参数: $pertime => 缓存输出的间距时间
* @参数: $sql => sql语句
* @参数: $templatefile => 模板文件名称(相对路线卡塔尔国
* www.php100.com 来自
**/
function __cache($cachefile,$pertime,$sql,$templatefile) {
global $db;
if(time() – @filemtime($cachefile) >= $pertime) {
$query = $db->query($sql);
while($r=$db->fetch($query)) {
$cachelist[] = $r;
}
include $templatefile.’.php’;
$cacheserialize = serialize($cachelist);
file_put_contents($cachefile,$cacheserialize);
}else{
$cachelist = unserialize(file_get_contents($cachefile));
include $templatefile.’.php’;
}
}

 近日在钻探PHPCMS系统,明日与我们享受的是PHPCMS系统的缓存形式总括,假如大家有以为窘迫的地点请提出来。**

都以超级粗略的东西.大家瞅着自小编注释渐渐看吧.慢慢精通,最CANON装了PHPCMS
在来看.因为这么能够看下它的数据库结构音讯.能够协助精晓.

phpcms使用的缓存方式总计
a.模板编写翻译缓存**
参照文件include/global.func.php及include/template.func.php
模板编写翻译缓存的规律其实超轻便,若是模板是首先次编译,则一向编写翻译它,假设不是第一回编写翻译,则相比较模板文件($tplfileState of Qatar及模板缓存文件
($compiledtplfile卡塔尔国的改革时间,倘若模板文件的改革时间大于编译过的模版缓存文件,则编写翻译模板,不然不编写翻译模板,进步了程序的推行功能。
function template($module = ‘phpcms’, $template = ‘index’)
{
    global $CONFIG;
    $compiledtplfile =
$CONFIG[‘templatescachedir’].$module.’_’.$template.’.tpl.php’;
    if($CONFIG[‘templaterefresh’])
    {
        $tplfile =
PHPCMS_ROOT.’/templates/’.$CONFIG[‘defaulttemplate’].’/’.$module.’/’.$template.’.html’;
        if(!file_exists($compiledtplfile) || @filemtime($tplfile) >
@filemtime($compiledtplfile))
        {
            require_once PHPCMS_ROOT.’/include/template.func.php’;
            template_refresh($tplfile, $compiledtplfile);
        }
    }
    return $compiledtplfile;
}

第一是数码库类,phpcms 的数据库 分mysql 和mssql 版本.  MSSQL
版本的自身就背着了.  他们珍视的sql 语句分化点就在于大家分页常用到的
limit  语句.所以.在 mssql 数据库类驱动里.他做了个相当好的封装.让MYSQL
和MSSQL在SQL语句方面包车型客车差别性就十分的小了.能够说PHPCMS你能够不管改变数据库只要在代码中换下数据库类驱动就能够.

b.在动态页面里面产生静态的缓存文件
与c的缓存原理相近,只是此处生成的文书名相对固定
以问吗模块为例实行表明

此目录下有个index.php文件,剖断当前目录下是或不是存在名叫index_cache.html的公文,假使有未有过失效期,则直接包蕴此文件,不然动态地读取完数据后保存为index_cache.html文件,以备后一次利用。
文本index.php中的内容:
<?php
require_once ‘./include/common.inc.php’;
$lastedittime = @filemtime(‘index_cache.html’);
$lastedittime = $PHP_TIME-$lastedittime;
$autoupdatetime = intval($MOD[‘autoupdate’]);
//$MOD[‘autoupdate’]根源缓存文件data/cache/wenba_setting.php中的内容
if(file_exists(‘index_cache.html’) &&
$lastedittime<$autoupdatetime)
{   
    echo “include cache file”;
    include ‘index_cache.html’;
}
else
{
    echo “read dynamic page”;

?>
怎么剖断文件是或不是失效呢,文件data/cache/wenba_setting.php中犹如下的安装,此中字段autoupdate的值就是文件失效的时刻,单位是秒,在后台能够扩充设置
文件wenba_setting.php是从何地来的吗,举行安装时自动把各个模块的多寡保存到数据库中了,安装时就转换缓存数据了,在include/common.inc.php中等高校函授数cache_all也可以扭转缓存,后台进行安装时cache会自动更新的
<?php
 return array (
  ‘higth_score’ => ‘100’,
  ‘anybody_score’ => ‘2’,
  ‘answer_give_credit’ => ‘5’,
  ‘vote_give_credit’ => ‘1’,
  ‘highscore’ => ‘2’,
  ‘vote_give_actor’ => ‘集团白领

<?php
/**
mysql数据库类。写得比较轻易。也没怎么好说的。我们温馨看下精晓下。
接下来就足以跳过了。
*/
defined(‘IN_PHPCMS’) or exit(‘Access Denied’);
/**
以此东西是还是不是很熟呀。对了。在上大器晚成章早就讲过了。也以前在上黄金时代章的common.inc.php
运营文件之中定义了  IN_PHPCMS 
 所以在偏下的PHP文件里都检查评定下是或不是是人为”跳墙“进来的。是就搁浅
*/
/**
* Mysql 数据库类,帮助Cache效率
*/
class db_mysql
{
/**
* MySQL 连接标志
* @var resource
*/
var $connid;
/**
* 整型变量用来计量被奉行的sql语句数量
* @var int
*/
var $querynum = 0;
/**
* 数据库连接,重返数据库连接标记符
* @param string 数据库服务器主机
* @param string 数据库服务器帐号
* @param string 数据库服务器密码
* @param string 数据库名
* @param bool 是还是不是维持不断连接,1为持续连接,0为非持续连接
* @return link_identifier
*/
function connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect = 0)
{
  global $CONFIG;
  $func = $pconnect == 1 ? ‘mysql_pconnect’ : ‘mysql_connect’;
  /**
  mysql_pconnect(卡塔尔(قطر‎  为常连接。它和mysql_connect 的分别是
前面三个在多进度的WEB服务器上功效相比好。但也可能有劣势正是在关于专业和数码表锁方面。详细的情况请查看本人的手册。
  */
  if(!$this->connid = @$func($dbhost, $dbuser, $dbpw))
  {
   $this->halt(‘Can not connect to MySQL server’);
  }
  // 当mysql版本为4.1之上时,启用数据库字符集设置
  if($this->version() > ‘4.1’ && $CONFIG[‘dbcharset’])
        {
   mysql_query(“SET NAMES ‘”.$CONFIG[‘dbcharset’].”‘” ,
$this->connid);
  }
  // 当mysql版本为5.0上述时,设置sql
mode,mysql5数据库带了字符集格局。设置下就好
  if($this->version() > ‘5.0’)
  {
   mysql_query(“SET sql_mode=”” , $this->connid);
  }
  if($dbname)
  {
 
 if([email=!@mysql_select_db($dbname]!@mysql_select_db($dbname[/email]
, $this->connid))
   {
    $this->halt(‘Cannot use database ‘.$dbname);
   }
  }
  return $this->connid;
}
/**
* 选用数据库
* @param string 数据库名
*/
function select_db($dbname)
{
  return mysql_select_db($dbname , $this->connid);
}
/**
* 执行sql语句
* @param string sql语句
* @param string 默以为空,可选值为 CACHE UNBUFFERED
* @param int Cache以秒为单位的生命周期
* @return resource
*/
function query($sql , $type = ” , $expires = 3600, $dbname = ”)
{
  $func = $type == ‘UNBUFFERED’ ? ‘mysql_unbuffered_query’ :
‘mysql_query’;
  /**
  mysql_unbuffered_query 效用更加好。节外省存 看手册
  */
  if(!($query = $func($sql , $this->connid)) && $type != ‘SILENT’)
  {
   $this->halt(‘MySQL Query Error’, $sql);
  }
  $this->querynum++;
  return $query;
}
/**
* 推行sql语句,只收获一条记下
* @param string sql语句
* @param string 默以为空,可选值为 CACHE UNBUFFERED
* @param int Cache以秒为单位的生命周期
* @return array
*/
function get_one($sql, $type = ”, $expires = 3600, $dbname = ”)
{
  $query = $this->query($sql, $type, $expires, $dbname);
  $rs = $this->fetch_array($query);
  $this->free_result($query);
  return $rs ;
}
/**
* 从结果集中获得意气风发行作为关周密组
* @param resource 数据库查询结果财富
* @param string 定义再次来到类型
* @return array
*/
function fetch_array($query, $result_type = MYSQL_ASSOC)
{
  return mysql_fetch_array($query, $result_type);
}
/**
* 拿到前叁回 MySQL 操作所影响的笔录行数
* @return int
*/
function affected_rows()
{
  return mysql_affected_rows($this->connid);
}
/**
* 得到结果聚集央银行的多少
* @return int
*/
function num_rows($query)
{
  return mysql_num_rows($query);
}
/**
* 重临结果集中字段的数据
* @return int
*/
function num_fields($query)
{
  return mysql_num_fields($query);
}
    /**
* @return array
*/
function result($query, $row)
{
  return @mysql_result($query, $row);
}
function free_result($query)
{
  return mysql_free_result($query);
}
/**
* 拿到上一步 INSERT 操作爆发的 ID
* @return int
*/
function insert_id()
{
  return mysql_insert_id($this->connid);
}
    /**
* @return array
*/
function fetch_row($query)
{
  return mysql_fetch_row($query);
}
    /**
* @return string
*/
function version()
{
  return mysql_get_server_info($this->connid);
}
function close()
{
  return mysql_close($this->connid);
}
    /**
* @return string
*/
function error()
{
  return @mysql_error($this->connid);
}
    /**
* @return int
*/
function errno()
{
  return intval(@mysql_errno($this->connid)) ;
}
/**
mysql_errno(卡塔尔国  函数也蛮好使的啊。本身试下
*/
    /**
* 突显mysql错误消息
*/
function halt($message = ”, $sql = ”)
{
  exit(“MySQL Query:$sql <br> MySQL Error:”.$this->error().”
<br> MySQL Errno:”.$this->errno().” <br>
Message:$message”);
}
}
?>
PHPCMS的文本缓存实现:
<?php
defined(‘IN_PHPCMS’) or exit(‘Access Denied’);
/**
其一文件之中全部都以关于生成文书缓存的函数。文本缓存是个好东西。日常的档期的顺序,大家用不着内存缓存
: memcached  ,文本解决。
原理是这么的:
我们在后台是否能够安装重重有关网址的参数。而那么些参数相当多都以一贯的。就不转换的。都存到咱的数据库上。而作者辈前后相继这里吗
老是都要访问数据库读出参数来进展大家前后相继中的操作。首先数据库查询是个很耗硬盘IO财富的一个事物,所以文本缓存适逢其会能减轻数据库那边的承重。
我们在程序起头就把数据Curry面包车型地铁配备都转载为数组
等  放到  php文件之中。那样大家能够直接待上访谈php文件而不用每一遍都访问数据库了。  php文本缓存其实成了
我们前后相继和数据库的一个中间件。
所以大家本人写自个儿的公文缓存的时候其实要促成的非常的粗略:  读数据库  ->  写到PHP文件
->  程序中include
来吗。开首文本缓存学习
*/
function cache_all(卡塔尔  //生成全数缓存的总操作函数
{
cache_table(卡塔尔;
//生成全体的数据库表名,表名是依靠数据库里面当前的注明而生成。请看那么些函数的详细分析
require_once PHPCMS_CACHEDI奥迪Q5.’table.php’; //包罗表常量
cache_common();
cache_member_group();
$modules = cache_module();
$channelids = cache_channel(0);
$keyids = array_merge($modules, $channelids);
foreach($keyids as $keyid)
{
  $catids = cache_categorys($keyid);
  if(is_array($catids))
  {
   foreach($catids as $catid)
   {
    cache_category($catid);
   }
  }
}
cache_type(0);
return TRUE;
}
function cache_common()
{
global $db;
$query = $db->query(“SELECT
module,name,iscore,iscopy,isshare,moduledir,moduledomain FROM
“.TABLE_MODULE.” WHERE disabled=0″卡塔尔国; //查询全数能用的模块
while($r = $db->fetch_array($query))
{
  $r[‘linkurl’] = ”;
  if($r[‘module’] != ‘phpcms’ && $r[‘iscopy’] == 0) $r[‘linkurl’]
= linkurl($r[‘moduledomain’] ? dir_path($r[‘moduledomain’]) :
$r[‘moduledir’].’/’);
  //若是模块存在目录的就取它目录地址
  unset($r[‘moduledomain’]);
  $key = $r[‘module’];
  $data[$key] = $r;
}
$CACHE[‘module’] = $data; //存到缓存数组,等一下联合举行把 $CACHE
数组写到文本里去
$data = array();
$query = $db->query(“SELECT
channelid,module,channelname,channeldir,channeldomain,channelpic,introduce,style,islink,linkurl,cat_html_urlruleid,item_html_urlruleid,special_html_urlruleid,cat_php_urlruleid,item_php_urlruleid,special_php_urlruleid
FROM “.TABLE_CHANNEL.” WHERE disabled=0 O奥德赛DE讴歌RDX by listorder”State of Qatar;
//罗列能用的频段列表
while($r = $db->fetch_array($query))
{
  $r[‘linkurl’] = linkurl($r[‘linkurl’]);
  $key = $r[‘channelid’];
  $data[$key] = $r;
}
$CACHE[‘channel’] = $data; //存到缓存数组
$data = array();
    $r = $db->get_one(“SELECT setting FROM “.TABLE_MODULE.” WHERE
module=’phpcms'”);
$CACHE[‘phpcms’] = unserialize($r[‘setting’]);
//查询 phpcms这一个模块的设置音信,大家能够看下数据库那么些表内容。setting
字段里面包车型地铁新闻是透过serialize 函数窜行化的。
//所以抽取的原委要unserialize 反窜行.作者是挺中意使用serialize
函数的。他能够实现把贰个数组存到数据库或把二个指标存到数据库。或是拿来GET传递都行。
//太强了。我们能够试用下。或者你项目有个别地方要求用到哦。
$fields = array();
$result = $db->query(“SELECT * FROM “.TABLE_FIELD.” OOdysseyDE帕杰罗 BY
田野同志id”卡塔尔; //下栽模块的音讯,请本身看下这些表的数量就知晓
    while($r = $db->fetch_array($result))
{
  $tablename = $r[‘tablename’];
  $fields[$tablename] .= ‘,’.$r[‘name’];
}
$CACHE[‘field’] = $fields;
cache_write(‘common.php’, $CACHE卡塔尔(قطر‎; //早先把$CACHE 数组写到 common.php
那些文件缓存里。大家能够和睦去开采这些文件看下内容。一切驾驭
    return $CACHE;
}
function
cache_update($action=”State of Qatar//更新文本缓存。最佳在后台操作使用。因为PHP的公文flock
文件锁在某个平台应用不是很好。会身不由己多顾客同写二个文书进而破坏缓存文件
{
global $db;
$data=array();
switch($action)
{
  case ‘keylink’;
   $query=$db->query(“SELECT linktext,linkurl FROM “.TABLE_KEYLINK.”
where passed=1″);
   while($r=$db->fetch_array($query)){
      $data[]=$r;
   }
  break;
  case ‘reword’;
   $query = $db->query(“SELECT word,replacement FROM
“.TABLE_REWORD.” where passed=1″);
   while($r = $db->fetch_array($query))
   {
    $data[]=$r;
   }
  break;
  default:
   $actions = array(‘keylink’,’reword’);
   array_map(‘cache_update’, $actions);
   return TRUE;
}
cache_write(‘cache_’.$action.’.php’, $data);
return $data;
}
function cache_table()
{
global $db,$CONFIG;
$query = $db->query(“SHOW TABLES FROM
`”.$CONFIG[‘dbname’].”`”);
/**
来得数据Curry面包车型大巴享有表名
*/
while($r = $db->fetch_row($query))
{
  $table = $r[0];
  if(preg_match(“/^”.$CONFIG[‘tablepre’].”/i”, $table卡塔尔(قطر‎)//搜索表前缀等于 $CONFIG[‘tablepre’] (在config.inc.php里设置State of Qatar@@表前缀还应该有这一个功效 嘿嘿
  {
   $tablename = str_replace($CONFIG[‘tablepre’], ‘table_’,
$table);
   $data[$tablename] = $table;    //  $data[‘table_xx’] = xx; 情势 
 只可以意会下了
  }
}
$db->free_result($query);  //$db->free_result(卡塔尔  那一个类情势其实是掉用了函数:mysql_free_result()函数 首若是为着免去数据库大的询问而攻下的内部存储器。仍然有供给的啊
if(!is_dir(PHPCMS_CACHEDIR)) // 常量 PHPCMS_CACHEDIRubicon 在
common.inc.php 里面定义的。大家不记得了去看看啊。是存放在phpcms
缓存目录的不二等秘书籍,这里意思是:假如缓存目录一纸空文
{
  dir_create(PHPCMS_CACHEDIOdyssey卡塔尔(قطر‎; //要是缓存目录子虚乌有那么就创办
  dir_create($CONFIG[‘templatescachedir’]State of Qatar;
//创建编译后的PHP模板目录,有关phpcms模板引擎编写。在下一章合适就开讲
  /**
  dir_create(卡塔尔 函数为创建 目录函数。PHPCMS自身包裹的,刚看了下。phpcms
挺强。那么些函数还足以因此ftp 来成立目录。那样就能够减轻一些
开启了辽阳情势下的服务器对于开创目录等并发的题目
  因为关乎到PHP FTP 知识。所以策画讲授到上面再说。
  */
}
cache_write(‘table.php’, $data , ‘constant’卡塔尔; //相当多冤家说找不到phpcms
表常量在那定义的。就是在这里间。
/**
cache_write(State of Qatar 函数在global.func.php里面定义的。是把
已经从数量库抽取来的数组音讯写到
PHP文本上去。@@文本缓存关键的一步  废话少说上菜:
  function cache_write($file, $string, $type = ‘array’)
  {
   if(is_array($string卡塔尔国State of Qatar //检查评定 $string
内容是字符窜的呢依旧数组的,是数组的那就继续 ..
   {
    $type = strtolower($type);  
    if($type == ‘array’卡塔尔(قطر‎//然后再判定那么些函数的情势标致
,是还是不是为数组形式,默认为数组格局
    {
     $string = “<?php/n return
“.var_export($string,TRUE).”;/n?>”;
 
   //这几个太重大了。因为我们把数据库的新闻写到文本上去的时候。是以相符PHP语法的格式写进去的。为啥吧?@@
十二分废话,因为生龙活虎旦不是以PHP格式写到文件之中去
     那么那几个PHP文件怎能给我们include 进程序运转调用呢? 呵呵。
知道这点就着实知道文本缓存的兑现了。忒简单。
这里运用了个小本领:使用了 var_export() 函数
 
   那一个函数会再次回到二个变量的字符窜格局。那一个函数太有利于了。若无那些函数,大家还要协和想办法落到实处啊。本身写三回文本缓存就知道了。会越过这些主题材料的。
‘/n’ 那一个是
     文本文件的换行。初读书人 别把<br> 和 ‘/n’ 搞混罗。 二个是html
的 三个是文件文件的
    }
    elseif($type == ‘constant’State of Qatar //以内容方式
    {
     $data=”;
     foreach($string as $key => $value) $data .=
“define(‘”.strtoupper($key).”‘,'”.addslashes($value).”‘);/n”;
     $string = “<?php/n”.$data.”/n?>”;
 
   假若以内容情势的话。就不是写数组到文本里面了。而是把内容都定义成常量。
    }
   }
   $strlen = file_put_contents(PHPCMS_CACHEDIR.$file,
$string);//file_put_contents(卡塔尔国函数 是PHP5才支撑的 功用最佳。建议采取
   chmod(PHPCMS_CACHEDIEvoque.$file, 0777卡塔尔(قطر‎; 设置目录 为可读可写可施行
   return $strlen; //重返写到文本的字节数
  }
  
  再说多三个读 缓存文件的操作函数  :上菜
  function cache_read($file, $mode = ‘i’)
   {
    $cachefile = PHPCMS_CACHEDIR.$file;
    if(!file_exists($cachefile)) return array();
    return $mode == ‘i’ ? include $cachefile :
file_get_contents($cachefile);
   }
   读缓存其实正是 include php缓存文件。 讲罢离开
*/
return $data;
}
/**
phpcms 的有着数据库表名
都用根据数据库当前的表名来用常量来张开定义。作者觉着这么设计不是很好。缺乏灵活:比方要是我们改动数据库的一个表名的话。
那就是说会并发找不到表的错误音信。何况想要修复还很麻烦。正是说不可能随意校订表名了。不引入大家这么写。大家能够把表名都定义在二个PHP文件之中。那样大家之后
要改有个别表名,就很有益了。
*/
function cache_module($module = ”)
{
global $db;
if($module)
{
  $r = $db->get_one(“SELECT
setting,module,name,iscopy,moduledir,moduledomain FROM “.TABLE_MODULE.”
WHERE module=’$module'”State of Qatar; //模块具体消息
  if($r[‘setting’])
  {
   $setting = unserialize($r[‘setting’]卡塔尔国;
//讲过了反窜行。因为内部音信是窜行化后再存到数据库的
  }
  $setting[‘name’] = $r[‘name’];
  $setting[‘moduledir’] = $r[‘moduledir’];
  $setting[‘moduledomain’] = $r[‘moduledomain’];
  $setting[‘linkurl’] = ”;
  if($r[‘module’] != ‘phpcms’ && $r[‘iscopy’] == 0)
  {
   $setting[‘linkurl’] = linkurl($r[‘moduledomain’] ?
dir_path($r[‘moduledomain’]) : $r[‘moduledir’].’/’);
            cache_categorys($module);
  }
  unset($r[‘moduledomain’]);
  cache_write($module.’_setting.php’, $setting);
  return $setting;
}
else
{
  $query = $db->query(“SELECT module FROM “.TABLE_MODULE.” WHERE
disabled=0 ORDER by moduleid”);
  while($r = $db->fetch_array($query))
  {
   cache_module($r[‘module’]);
   $modules[] = $r[‘module’];
        }
  return $modules;
}
}
function cache_channel($channelid=0)
{
global $db;
if($channelid)
{
  $data = $db->get_one(“SELECT * FROM “.TABLE_CHANNEL.” WHERE
channelid=$channelid”);
  if($data && !$data[‘islink’])
  {
   if($data[‘setting’])
   {
          $setting = unserialize($data[‘setting’]);
    unset($data[‘setting’]);
    $data = is_array($setting) ? array_merge($data, $setting) :
$data;
   }
   $data[‘linkurl’] = linkurl($data[‘linkurl’]);
   cache_write(‘channel_’.$channelid.’.php’, $data);
   cache_categorys($channelid);
   return $data;
  }
    }
else
{
  $query = $db->query(“SELECT channelid FROM “.TABLE_CHANNEL.” WHERE
islink=0 AND disabled=0 ORDER by channelid”);
  while($r = $db->fetch_array($query))
  {
   cache_channel($r[‘channelid’]);
   $channelids[] = $r[‘channelid’];
  }
  return $channelids;
}
}
function cache_categorys($keyid)
{
global $db,$PHPCMS,$CHANNEL;
$urlpre = ”;
if(is_numeric($keyid))
{
  $keyid = intval($keyid);
  $module = $CHANNEL[$keyid][‘module’];
        $sql = ” channelid=$keyid “;
}
else
{
        $sql = ” module=’$keyid’ “;
}
$catids = $data = array();
    $query = $db->query(“SELECT
module,channelid,catid,catname,style,introduce,catpic,islink,catdir,linkurl,parentid,arrparentid,parentdir,child,arrchildid,items,itemordertype,itemtarget,ismenu,islist,ishtml,htmldir,prefix,urlruleid,item_prefix,item_html_urlruleid,item_php_urlruleid
FROM “.TABLE_CATEGORY.” WHERE $sql ORDER by listorder,catid”);
    while($r = $db->fetch_array($query))
{
  $r[‘linkurl’] =
str_replace($PHPCMS[‘index’].’.’.$PHPCMS[‘fileext’], ”,
$r[‘linkurl’]);
     $r[‘linkurl’] = $urlpre ? preg_replace(“|^”.$urlpre.”|”, ”,
$r[‘linkurl’]) : linkurl($r[‘linkurl’]);
  $catid = $r[‘catid’];
        $data[$catid] = $r;
  $catids[] = $catid;
    }
if($data) cache_write(‘categorys_’.$keyid.’.php’, $dataState of Qatar;
//写缓存罗。
return $catids;
}
function cache_category($catid)
{
global $db,$PHPCMS;
if(!$catid) return FALSE;
    $data = $db->get_one(“SELECT * FROM “.TABLE_CATEGORY.” WHERE
catid=$catid”);
$setting = unserialize($data[‘setting’]);
unset($data[‘setting’]);
$data = is_array($setting) ? array_merge($data, $setting) : $data;
$data[‘linkurl’] =
linkurl(str_replace($PHPCMS[‘index’].’.’.$PHPCMS[‘fileext’], ”,
$data[‘linkurl’]));
cache_write(‘category_’.$catid.’.php’, $data);
return $data;
}
function cache_type($keyid=0)
{
global $db;
if($keyid)
{
     $result = $db->query(“SELECT * FROM “.TABLE_TYPE.” WHERE
keyid=’$keyid'”);
     $data = array();
     while($r = $db->fetch_array($result))
     {
   $r[‘introduce’] = $r[‘introduce’]? $r[‘introduce’]:’ ‘;
      $data[$r[‘typeid’]] = $r;
     }
     if($data)
     {
   cache_write(‘type_’.$keyid.’.php’, $data);
     }
  return $data;
}
else
{
  $modules = array();
  $query = $db->query(“SELECT module FROM “.TABLE_MODULE.” WHERE
disabled=0 ORDER by moduleid”);
  while($r = $db->fetch_array($query))
  {
   $modules[] = $r[‘module’];
        }  
  $channelids = array();
  $query = $db->query(“SELECT channelid FROM “.TABLE_CHANNEL.” WHERE
islink=0 AND disabled=0 ORDER by channelid”);
  while($r = $db->fetch_array($query))
  {
   $channelids[] = $r[‘channelid’];
  }
  $modulechannels = array_merge($modules,$channelids);
  foreach($modulechannels as $m)
  {
   $result = $db->query(“SELECT * FROM “.TABLE_TYPE.” WHERE
keyid=’$m'”);
   $TYPE = array();
   while($r = $db->fetch_array($result))
   {
    $r[‘introduce’] = $r[‘introduce’]? $r[‘introduce’]:’ ‘;
    $TYPE[$r[‘typeid’]] = $r;
   }
   cache_write(‘type_’.$m.’.php’,$TYPE);
  }
  return $modulechannels;  
}
}
function cache_member_group()
{
global $db;
$query = $db->query(“SELECT * FROM “.TABLE_MEMBER_GROUP.” OCRUISERDE大切诺基 BY
groupid”卡塔尔; //客商组音信
while($r = $db->fetch_array($query))
{
  $groupid = $r[‘groupid’];
  cache_write(‘member_group_’.$groupid.’.php’, $r);
  $data[$groupid] = $r;
}
cache_write(‘member_group.php’, $data卡塔尔; //通晓了吗。写缓存罗
return $data;
}
function cache_banip()
{
global $db,$PHP_TIME;
$result = $db->query(“SELECT ip,overtime FROM “.TABLE_BANIP.” WHERE
ifban=1 and overtime>=$PHP_TIME order by id desc “);
while($r = $db->fetch_array($result))
{
  $data[] =
array(‘ip’=>$r[‘ip’],’overtime’=>$r[‘overtime’]);
}
$db->free_result($result);
cache_write(‘banip.php’, $data);
return $data;
}
?>

魔法师


科举夺魁

武将

尘间奇侠’,
  ‘autoupdate’ => ’10’,
  ‘name’ => ‘问吧’,
  ‘moduledir’ => ‘wenba’,
  ‘moduledomain’ => ”,
  ‘linkurl’ => ‘/opensource/phpcms2007_sp6_gbk/phpcms/wenba/’,
);
?>

include/global.func.php
立异模块设置函数
function module_setting($module, $setting)
{
    global $db,$MODULE,$LANG;
    if(!is_array($setting) || !array_key_exists($module,$MODULE))
return FALSE;
    if(isset($setting[‘moduledomain’]))
    {
        $moduledomain = $setting[‘moduledomain’];
        $db->query(“UPDATE “.TABLE_MODULE.” SET
moduledomain=’$moduledomain’ WHERE module=’$module'”);
        unset($setting[‘moduledomain’]);
    }
    $setting = addslashes(serialize(new_stripslashes($setting)));
    //将有些模块的多少个设置的值经数组体系化将来保存在贰个字段setting中
    $db->query(“UPDATE “.TABLE_MODULE.” SET setting=’$setting’ WHERE
module=’$module'”);
    cache_module($module);
    cache_common();
    return TRUE;
}

c.在动态页面里面爆发静态的缓存文件
与b的缓存原理肖似,只是此处生成的文书名是根据测算$PHP_SELF与$PHP_QUESportageYSTKugaING的md5值生成的文书名,相对于全体php动态页面来讲都是同风流倜傥的,这么些观念对比精典,值得借签
以问吗模块为例举办求证
文本调用顺序为:index.php -> js.php -> ad.php ->
global.func.php

此目录下有个index.php文件,剖断当前目录下是还是不是存在名称叫index_cache.html的文书,要是有,则直接包含此文件,假使不设有此文件,则动态地读取完数据后保存在index_cache.html文件,以备下一次应用

用上述的url访谈时,页面里面富含犹如下的生机勃勃行js代码
<script language=”javascript”
src=”/opensource/phpcms2007_sp6_gbk/phpcms/data/js.php?id=1″></script>
此js代码其实正是动态调用php页面包车型大巴开始和结果

js.php文件的剧情:
<?php
chdir(‘../ads/’);
require ‘./ad.php’;
?>

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图