⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cache.func.php

📁 中观在线zol的后台管理代码
💻 PHP
字号:
<?
/**
 * 缓存处理 版本 v1.0.0
 * all rights reserved by tech of ZOL
 * last modified time:2008-4-12
 */

/**
 * 数组内容格式处理
 * @param $array 要处理的数组
 * @param $level 数组的更新级别
 */
function arrayeval($array, $level = 0) {
	$space = '';
	for($i = 0; $i <= $level; $i++) {
		$space .= "\t";
	}
	$evaluate = "Array\n$space(\n";
	$comma = $space;
	foreach($array as $key => $val) {
		$key = is_string($key) ? '\''.addcslashes($key, '\'\\').'\'' : $key;
		$val = !is_array($val) && (!preg_match("/^\-?[1-9]\d*$/", $val) || strlen($val) > 12) ? '\''.addcslashes($val, '\'\\').'\'' : $val;
		if(is_array($val)) {
			$evaluate .= "$comma$key => ".arrayeval($val, $level + 1);
		} else {
			$evaluate .= "$comma$key => $val";
		}
		$comma = ",\n$space";
	}
	$evaluate .= "\n$space)";
	return $evaluate;
}

/**
 * 获得缓存的数据
 * @param $cachename 缓存名称
 */
function get_cache_array($cachename){
	global $db_power,$db_doc,$db_comment,$db_sub_plugin,$db_pro;
	
	$cols = '*';	//默认查询全部字段
	$conditions = '';
	switch ($cachename) {
		case 'class':	//文章大类
			$table = 'document_class';	//要调用的表名
			$db = $db_doc;	//数据连接
			$cols = 'classid,classname';	//要查询的字段
			$conditions = "where 1 and status=0";	//查询条件
			break;
		
		case 'allclass':	//所有大类
			$table = 'document_class';
			$db = $db_doc;
			$cols = 'classid,classname,url,hostname,directory';
			$conditions = "where 1 and status=0";
			break;
		
		case 'subclass':	//文章子类
			$table = 'document_subclass';
			$db = $db_doc;
			$cols = 'subclassid,subclassname,classid';
			$conditions = "where 1 and status=0";
			break;
			
		case 'grandclass':	//文章子子类
			$table = 'document_grandclass';
			$db = $db_doc;
			$cols = 'grandclassid,grandclassname,subclassid';
			$conditions = "where 1 and status=0";
			break;
			
		case 'cate':  //产品大类
			$table = 'category';
			$db = $db_pro;
			$cols = 'id,name';
			$conditions = "WHERE property=0 ORDER BY id";
			break;

		case 'subcate':  //产品子类
			$table = 'subcategory s LEFT JOIN category c on s.categoryid=c.id';
			$db = $db_pro;
			$cols = 's.id,s.name,s.categoryid';
			$conditions = "WHERE c.property=0 ORDER BY s.order_sort DESC";
			break;
			
		case 'merchant':  //产品品牌
			$table = 'manufacturer m LEFT JOIN manu_product p ON m.id=p.manuid
			          LEFT JOIN subcategory s ON p.subcatid=s.id 
			          LEFT JOIN category c on s.categoryid=c.id';
			$db = $db_pro;
			$cols = 'DISTINCT m.id AS id,m.name AS name,p.subcatid';
			$conditions = "WHERE c.property=0 ORDER BY m.name";
			break;
			
		case 'merchant_red':  //产品品牌标红
			$table = 'pro_hits';
			$db = $db_pro;
			$cols = 'manu_id,sum(ip_count) hits,subcat_id';
			$conditions = "WHERE the_date>date_sub(now(),Interval 2 month) 
    	                   GROUP BY subcat_id,manu_id ORDER BY hits DESC";
			break;
			
		case 'user':	//用户基本信息
			$table = 'user_info';
			$db = $db_power;
			$cols = 'userid,defaultmenu,menuids,realname,groupid';
			$conditions = "where 1 and status=0";
			break;
			
		case 'menu_root':	//根菜单
			$table = 'menu';
			$db = $db_power;
			$cols = 'menuid,name,url';
			$conditions = "where 1 and type=1 and rootid=0 and status=0";
			break;
		
		case 'menu_sub':	//子菜单
			$table = 'menu';
			$db = $db_power;
			$cols = 'menuid';
			$conditions = "where 1 and type=1 and rootid=0 and status=0";
			break;
			
		case 'menu_action':	//菜单的链接
			$table = 'menu';
			$db = $db_power;
			$cols = 'menuid,url';
			$conditions = "where 1 and rootid<>0";
			break;
			
		case 'menu_hidden':	//隐藏的菜单
			$table = 'menu';
			$db = $db_power;
			$cols = 'menuid';
			$conditions = "where 1 and type=1 and rootid=0 and status=0";
			break;
			
		case 'menu_grand':	//子子菜单
			$table = 'menu';
			$db = $db_power;
			$cols = 'menuid';
			$conditions = "where 1 and type=1 and rootid!=0 and status=0";
			break;	
			
		case 'template':	//所有模板
			$table = 'template';
			$db = $db_doc;
			$cols = 'templateid,name,typeid';
			$conditions = "where 1 and status=0";
			break;
			
		case 'temp_rela':	//所有模板,按类别区分
			$table = 'template';
			$db = $db_doc;
			$cols = 'templateid,name,typeid';
			$conditions = "where 1 and status=0";
			break;
			
		case 'element':		//模板元素
			$table = 'template_element';
			$db = $db_doc;
			$cols = 'elementid,name,content';
			$conditions = "where 1 and typeid=3 and status=0";
			break;
			
		case 'set_channel':		//频道列表
			$table = 'channel_info';
			$db = $db_sub_plugin;
			$cols = 'id,name';
			$conditions = "where 1 and status=0";
			break;	
		case 'keywords':		//频道列表
			$table = 'public_keyword';
			$db = $db_doc;
			$cols = 'keyword,kurl,classid';
			$conditions = "where 1 and status=0 order by corder desc";
			break;
		case 'set_ad_channel':		//频道列表
			$table = 'ad_channel';
			$db = $db_sub_plugin;
			$cols = 'id,name';
			$conditions = "where 1 and status=0";
			break;
		case 'set_ad_place':		//频道列表
			$table = 'ad_place';
			$db = $db_sub_plugin;
			$cols = 'id,name';
			$conditions = "where 1 and status=0";
			break;
		
		case 'set_ad_group_channel':		//频道广告位列表
			$table = 'ad_channel';
			$db = $db_sub_plugin;
			$cols = 'id,name,groupid';
			$conditions = "where 1 and status=0";
			break;
		
		case 'set_ad_channel_place':		//频道列表
			$table = 'ad_place,ad_channel';
			$db = $db_sub_plugin;
			$cols = 'ad_place.id,ad_place.name,ad_channel.id as channelid';
			$conditions = "where 1 and ad_place.status=0 and ad_place.channel=ad_channel.id";
			break;
			
		case 'stat_channel':		//访问量
			$table = 'tb_channel';
			$db = $db_sub_plugin;
			$cols = 'channelid,channelname';
			$conditions = "where 1 order by corder desc";
			break;

		default:
			break;
	}
	
	//数据查询
	$sql_str = "SELECT $cols FROM $table $conditions";
	$data_res = $db -> get_results($sql_str,"O");
	
	//数据处理
	switch ($cachename) {
		case 'class':	//文章大类
			if($data_res){	//获得的数据
				foreach($data_res as $data){	//更新到相应数组中
					$cachedata['class_arr'][$data->classid]=$data->classname;
				}
			}
			break;
			
		case 'allclass':	//所有大类
			if($data_res){
				foreach($data_res as $data){
					$cachedata['allclass_arr'][$data->classid]['classname']=$data->classname;
					$cachedata['allclass_arr'][$data->classid]['url']=$data->url;
					$cachedata['allclass_arr'][$data->classid]['hostname']=$data->hostname;
					$cachedata['allclass_arr'][$data->classid]['directory']=$data->directory;
				}
			}
			break;
			
		case 'subclass':	//文章子类
			if($data_res){
				foreach($data_res as $data){
					$cachedata['subclass_arr'][$data->classid][$data->subclassid]=$data->subclassname;
				}
			}
			break;
		
		case 'grandclass':	//文章子子类
			if($data_res){
				foreach($data_res as $data){
					$cachedata['grandclass_arr'][$data->subclassid][$data->grandclassid]=$data->grandclassname;
				}
			}
			break;

		case 'cate':  //产品大类
		    if ($data_res) {
		    	foreach ($data_res as $data) {
		    		$cachedata['cate_arr'][$data->id] = $data->name;
		    	}
		    }
			break;

		case 'subcate':  //产品大类
		    if ($data_res) {
		    	foreach ($data_res as $data) {
		    		$cachedata['subcate_arr'][$data->categoryid][$data->id] = $data->name;
		    	}
		    }
			break;
		    
		case 'merchant':  //产品大类
		    if ($data_res) {
		    	foreach ($data_res as $data) {
		    		$cachedata['merchant_arr'][$data->subcatid][$data->id] = $data->name;
		    	}
		    }
			break;

		case 'merchant_red':  //产品大类
		    if ($data_res) {
		    	foreach ($data_res as $data) {
		    		$cachedata['merchant_red_arr'][$data->subcat_id][] = $data->manu_id;
		    	}
		    }	
			break;	    
		    
		case 'user':	//文章用户
			if($data_res){
				foreach($data_res as $data){
					$cachedata[$cachename][$data->userid]['defaultmenu']=$data->defaultmenu;
					$cachedata[$cachename][$data->userid]['menuids']=$data->menuids;
					$cachedata[$cachename][$data->userid]['realname']=$data->realname;
					$cachedata[$cachename][$data->userid]['usergroup']=$GLOBALS['settings']['user_group'][$data->groupid];
				}
			}
			break;
			
		case 'menu_root':	//根菜单
			if($data_res){
				foreach($data_res as $data){
					$cachedata[$cachename][$data->menuid]['name']=$data->name;
					$cachedata[$cachename][$data->menuid]['action']=$data->url;
				}
			}
			break;
			
		case 'menu_sub':	//子菜单
			if($data_res){
				foreach($data_res as $data){
					$cachedata[$cachename][$data->menuid] = array();
					//获得子菜单的信息
					$sql_str = "select menuid,name from menu where rootid=".$data->menuid;
					$db_power -> query($sql_str);
					while ($db_power -> next_record()){						
						$cachedata[$cachename][$data->menuid][$db_power -> f("menuid")] = $db_power -> f("name");
					}
				}
			}
			break;
		
		case 'menu_action':	//菜单链接
			if($data_res){
				foreach($data_res as $data){
					$cachedata[$cachename][$data->menuid]=$data->url;
				}
			}
			break;
			
		case 'menu_hidden':		//隐藏的链接
			if($data_res){
				foreach($data_res as $data){
					$cachedata[$cachename][$data->menuid] = array();
					$sql_str = "select menuid from menu where rootid=".$data->menuid." and status=1";
					$db_power -> query($sql_str);
					while ($db_power -> next_record()){						
						$cachedata[$cachename][$data->menuid][] = $db_power -> f("menuid");
					}
				}
			}
			break;
			
		case 'menu_grand':		//子子菜单
			if($data_res){
				foreach($data_res as $data){					
					$sql_str = "select menuid,name from menu where rootid=".$data->menuid." and status=0";
					$db_power -> query($sql_str);
					while ($db_power -> next_record()){						
						$cachedata[$cachename][$data->menuid][$db_power -> f("menuid")] = $db_power -> f("name");
					}
				}
			}
			break;
		
		case 'template':	//模板
			if($data_res){
				foreach($data_res as $data){
					$cachedata['temp_arr'][$data->templateid]=$data->name;
				}
			}
			break;
			
		case 'temp_rela':	//模板,按类型
			if($data_res){
				foreach($data_res as $data){
					$cachedata['temp_rela_arr'][$data->typeid][$data->templateid]=$data->name;
				}
			}
			break;
		
		case 'element':	//公用元素
			if($data_res){
				foreach($data_res as $data){
					$cachedata['elem_arr'][$data->elementid]['name']=$data->name;
					$cachedata['elem_arr'][$data->elementid]['content']=$data->content;
				}
			}
			break;
			
		case 'set_channel':	//频道列表
			if($data_res){
				foreach($data_res as $data){
					$cachedata[$cachename][$data->id]=$data->name;
				}
			}
			break;
		
		case 'keywords':	//频道列表
			if($data_res){
				foreach($data_res as $data){
					$cachedata['keyword_arr'][$data->classid][$data->keyword]=$data->kurl;
				}
			}
			break;
			
		case 'set_ad_channel':	//频道列表
			if($data_res){
				foreach($data_res as $data){
					$cachedata[$cachename][$data->id]=$data->name;
				}
			}
			break;	
		
		case 'set_ad_place':	//频道列表
			if($data_res){
				foreach($data_res as $data){
					$cachedata[$cachename][$data->id]=$data->name;
				}
			}
			break;
			
		case 'set_ad_group_channel':	//频道列表
			if($data_res){
				foreach($data_res as $data){
					$cachedata[$cachename][$data->groupid][$data->id]=$data->name;
				}
			}
			break;	

		case 'stat_channel':	//访问量
			if($data_res){
				foreach($data_res as $data){
					$cachedata['stat_channel_arr'][$data->channelid]=$data->channelname;
				}
			}
			break;
			
		case 'set_ad_channel_place':	//频道列表
			if($data_res){
				foreach($data_res as $data){
					$cachedata[$cachename][$data->channelid][$data->id]=$data->name;
					$cachedata['set_ad_place_channel'][$data->id]=$data->channelid;
				}
			}
			break;
		default:
			break;
	}
	return getcachevars($cachedata);
}

/**
 * 获得缓存的数据类型
 *
 * @param $data 要操作的数组
 * @param $type 数据类型(变量还是常量)
 */
function getcachevars($data, $type = 'VAR') {
	$evaluate = '';
	if($data){
		foreach($data as $key => $val) {
			if(is_array($val)) {
				$evaluate .= "\$$key = ".arrayeval($val).";\n";
			} else {
				$val = addcslashes($val, '\'\\');
				$evaluate .= $type == 'VAR' ? "\$$key = '$val';\n" : "define('".strtoupper($key)."', '$val');\n";
			}
		}
	}
	return $evaluate;
}


/**
 * 将缓存写入文件
 * @param $cachename 缓存名称
 * @param $cachedata 缓存数据
 * @param $dir		缓存的文件夹
 */
function write_cache_tofile($cachename,$cachedata,$dir=''){
	$dir = SYSTEM_ROOT."cachedata/".$dir;
	if(!is_dir($dir)) {
		@mkdir($dir, 0777);
	}
	
	if(@$fp = fopen($dir.$cachename.".cache.php", 'w')) {
		fwrite($fp, "<?php\n//CMS cache file, DO NOT modify me!\n".
			"//Created on ".date("M j, Y, G:i")."\n\n$cachedata?>");
		fclose($fp);
	}
}


/**
 * 更新缓存
 * @param $cachename 缓存名称
 */
function update_cache($cachename){
	//设定相应的缓存数组
	$cachescript = array(
			'user' => array('user'),
			'doc' => array('class','subclass','grandclass','allclass'),
			'product' => array('cate','subcate','merchant','merchant_red'),
			'menu' => array('menu_root','menu_sub','menu_action','menu_hidden','menu_grand'),
			'template' => array('template','temp_rela'),
			'link' => array('set_channel'),
			'ad' => array('set_ad_channel','set_ad_place','set_ad_group_channel','set_ad_channel_place'),
			'webstat' => array('stat_channel'),
			'keywords' => array('keywords'),
			'element' => array('element')
		);
	
	//单独更新缓存
	if($cachename){
		foreach ($cachescript[$cachename] as $cachenames){
			$cachedata .= get_cache_array($cachenames);
		}
		write_cache_tofile($cachename,$cachedata);		
	}
	
	//留出批量更新接口
	if(empty($cachename) && $execult_all=="Y"){
		foreach($cachescript as $key=>$val){
			$cachedata="";
			foreach ($cachescript[$key] as $cachenames){
				$cachedata .= get_cache_array($cachenames);
			}
			write_cache_tofile($key,$cachedata);
		}
	}
}

/**
 * 初始缓存更新
 * @param $cachename 缓存名称
 */
if($_REQUEST['update_cache_ALL']=="Y"){
	update_cache("","Y");
	echo "update all cache complate!";
}

?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -