UCHome中缓存处理文件(function_cache.php)的代码分析

UCHome处理缓存的方式是通过文件的形式来存储文件,然后前台读取的是在服务器上的,这一文件写的就是一些关于uchome要缓存的一些信息,很多的内容都有重复,所以就删除了一小部分

01.<?php
02./*
03.    [UCenter Home] (C) 2007-2008 Comsenz Inc.
04.    $Id: function_cache.php 2009-10-22 21:48:00
05.    @author ymaozi
06.    @copyright http://www.codedesign.cn/
07.    @uchome源码交流QQ群:83400263
08.*/
09.  
10.if(!defined('IN_UCHOME')) {
11.    exit('Access Denied');
12.}
13.  
14./**
15. * 更新配置文件
16. * @param bool $updatedata
17. */
18.function config_cache($updatedata=true) {
19.    global $_SGLOBAL;
20.  
21.    $_SCONFIG = array();
22.    $query = $_SGLOBAL['db']->query('SELECT * FROM '.tname('config')); //获取数据库中的配置文件信息
23.    while ($value = $_SGLOBAL['db']->fetch_array($query)) {
24.        if($value['var'] == 'privacy') {
25.            $value['datavalue'] = empty($value['datavalue'])?array():unserialize($value['datavalue']);
26.        }
27.        $_SCONFIG[$value['var']] = $value['datavalue']; //将数据库中配置数据存放到全局变量$_SCONFIG中
28.    }
29.    cache_write('config', '_SCONFIG', $_SCONFIG); //将缓存数据写入到缓存文件中
30.  
31.    if($updatedata) {
32.        $setting = data_get('setting'); //获取setting的配置数据
33.        $_SGLOBAL['setting'] = empty($setting)?array():unserialize($setting);
34.                //unserialize(),将序列化的字符串转换成数组
35.        cache_write('setting', "_SGLOBAL['setting']", $_SGLOBAL['setting']);
36.                //将设置文件写入到缓存文件
37.  
38.        $mail = data_get('mail');
39.        $_SGLOBAL['mail'] = empty($mail)?array():unserialize($mail);
40.        cache_write('mail', "_SGLOBAL['mail']", $_SGLOBAL['mail']);
41.  
42.        $spam = data_get('spam');
43.        $_SGLOBAL['spam'] = empty($spam)?array():unserialize($spam);
44.        cache_write('spam', "_SGLOBAL['spam']", $_SGLOBAL['spam']);
45.    }
46.}

001./**
002. * 更新network配置文件
003. * @param bool $updatedata
004. */
005.function network_cache() {
006.    global $_SGLOBAL, $_SCONFIG;
007.  
008.    $setting = data_get('network');
009.    $_SGLOBAL['network'] = empty($setting)?array():unserialize($setting);
010.    cache_write('network', "_SGLOBAL['network']", $_SGLOBAL['network']);
011.    //写入缓存文件
012.}
013.  
014./**
015. * 更新活动分类
016. */
017.function eventclass_cache(){
018.    global $_SGLOBAL;
019.  
020.    $_SGLOBAL['eventclass'] = array();
021.    // 从数据库获取活动的分类
022.    $query = $_SGLOBAL['db']->query("SELECT * FROM " . tname("eventclass") . " ORDER BY displayorder");
023.    while($value = $_SGLOBAL['db']->fetch_array($query)){
024.        if($value['poster']) {//如果存在发布人
025.            $value['poster'] = "data/event/".$value['classid'].".jpg";
026.        } else {//使用默认的图片
027.            $value['poster'] = "image/event/default.jpg";
028.        }
029.        $_SGLOBAL['eventclass'][$value['classid']] = $value;
030.    }
031.    cache_write('eventclass', "_SGLOBAL['eventclass']", $_SGLOBAL['eventclass']);
032.        //写入缓存文件
033.}
034.  
035./**
036. * 更新道具信息
037. */
038.function magic_cache(){
039.    global $_SGLOBAL;
040.  
041.    $_SGLOBAL['magic'] = array();
042.    // 从数据库获取
043.    $query = $_SGLOBAL['db']->query("SELECT mid, name FROM ".tname('magic')." WHERE close='0'");
044.    while($value = $_SGLOBAL['db']->fetch_array($query)){
045.        $_SGLOBAL['magic'][$value['mid']] = $value['name'];
046.    }
047.        //写入道具缓存文件
048.    cache_write('magic', "_SGLOBAL['magic']", $_SGLOBAL['magic']);
049.}
050.  
051./**
052. * 递归清空目录
053. * @param string $dir 要清空的目录名
054. */
055.function deltreedir($dir) {
056.    $files = sreaddir($dir);//获取目录内的文件
057.    foreach ($files as $file) {
058.        if(is_dir("$dir/$file")) {//如果返回的存在目录,则再进行一次递归
059.            deltreedir("$dir/$file");
060.        } else {
061.            @unlink("$dir/$file");//删除文件
062.        }
063.    }
064.}
065.  
066./**
067. * 数组转换成字串
068. * @param array $array 要转换的数组
069. * @param int $level 数组的层次
070. * @return string 返回转换后的字符串
071. */
072.function arrayeval($array, $level = 0) {
073.    $space = '';
074.    for($i = 0; $i <= $level; $i++) {
075.        $space .= "\t";
076.    }
077.    $evaluate = "Array\n$space(\n";
078.    $comma = $space;
079.    foreach($array as $key => $val) {
080.                //addcslashes($key, '\'\\');只对'与\进行转义
081.        $key = is_string($key) ? '\''.addcslashes($key, '\'\\').'\'' : $key;
082.                //如果$key不是数字,则设置为字符串,如果是数字,则直接取数字
083.        $val = !is_array($val) &amp;&amp; (!preg_match("/^\-?\d+$/", $val) || strlen($val) > 12 || substr($val, 0, 1)=='0') ? '\''.addcslashes($val, '\'\\').'\'' : $val;
084.        //如果$val不是数字,则设置为字符串,如果是数字,则直接取数字
085.                if(is_array($val)) {
086.                    //如果是数组,则再一次进行转换
087.            $evaluate .= "$comma$key => ".arrayeval($val, $level + 1);
088.        } else {
089.            $evaluate .= "$comma$key => $val";
090.        }
091.        $comma = ",\n$space";
092.    }
093.    $evaluate .= "\n$space)";
094.    return $evaluate;
095.}
096.  
097./**
098. *
099. * @param string $name
100. * @param <type> $var
101. * @param <type> $values
102. *
103. */
104.function cache_write($name, $var, $values) {
105.    $cachefile = S_ROOT.'./data/data_'.$name.'.php';//设置缓存文件地址
106.    $cachetext = "<?php\r\n".
107.        "if(!defined('IN_UCHOME')) exit('Access Denied');\r\n".
108.        '$'.$var.'='.arrayeval($values).//将数组转换成字符串
109.        "\r\n?>";
110.    if(!swritefile($cachefile, $cachetext)) {
111.        exit("File: $cachefile write error.");
112.    }
113.}
114.  
115.?>

posted on 2010-01-23 21:45  14的路  阅读(534)  评论(0编辑  收藏  举报

导航

友情链接:源码下载