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) && (!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.?>