| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585 | <?php/** *  * 更新缓存类 * */defined('IN_PHPCMS') or exit('No permission resources.');class cache_api {		private $db;		public function __construct() {		$this->db = '';		$this->siteid = get_siteid();	}		/**	 * 更新缓存	 * @param string $model 方法名	 * @param string $param 参数	 */	public function cache($model = '', $param = '') {		if (file_exists(PC_PATH.'model'.DIRECTORY_SEPARATOR.$model.'_model.class.php')) {			$this->db = pc_base::load_model($model.'_model');			if ($param) {				$this->$model($param);			} else {				$this->$model();			}		} else {			$this->$model();		}	}			/**	 * 更新站点缓存方法	 */	public function cache_site() {		$site = pc_base::load_app_class('sites', 'admin');		$site->set_cache();	}		/**	 * 更新栏目缓存方法	 */	public function category() {		$categorys = array();		$models = getcache('model','commons');		if (is_array($models)) {			foreach ($models as $modelid=>$model) {				$datas = $this->db->select(array('modelid'=>$modelid),'catid,type,items',10000);				$array = array();				foreach ($datas as $r) {					if($r['type']==0) $array[$r['catid']] = $r['items'];				}				setcache('category_items_'.$modelid, $array,'commons');			}		}		$array = array();		$categorys = $this->db->select('`module`=\'content\'','catid,siteid',20000,'listorder ASC');		foreach ($categorys as $r) {			$array[$r['catid']] = $r['siteid'];		}		setcache('category_content',$array,'commons');		$categorys = $this->categorys = array();		$this->categorys = $this->db->select(array('siteid'=>$this->siteid, 'module'=>'content'),'*',10000,'listorder ASC');		foreach($this->categorys as $r) {			unset($r['module']);			$setting = string2array($r['setting']);			$r['create_to_html_root'] = $setting['create_to_html_root'];			$r['ishtml'] = $setting['ishtml'];			$r['content_ishtml'] = $setting['content_ishtml'];			$r['category_ruleid'] = $setting['category_ruleid'];			$r['show_ruleid'] = $setting['show_ruleid'];			$r['workflowid'] = $setting['workflowid'];			$r['isdomain'] = '0';			if(!preg_match('/^(http|https):\/\//', $r['url'])) {				$r['url'] = siteurl($r['siteid']).$r['url'];			} elseif ($r['ishtml']) {				$r['isdomain'] = '1';			}			$categorys[$r['catid']] = $r;		}		setcache('category_content_'.$this->siteid,$categorys,'commons');		return true;	}		/**	 * 更新下载服务器缓存方法	 */	public function downservers () {		$infos = $this->db->select();		foreach ($infos as $info){			$servers[$info['id']] = $info;		}		setcache('downservers', $servers,'commons');		return $infos;	}		/**	 * 更新敏感词缓存方法	 */	public function badword() {		$infos = $this->db->select('','badid,badword,replaceword,level','','badid ASC');		setcache('badword', $infos, 'commons');		return true;	}		/**	 * 更新ip禁止缓存方法	 */	public function ipbanned() {		$infos = $this->db->select('', '`ip`,`expires`', '', 'ipbannedid desc');		setcache('ipbanned', $infos, 'commons');		return true;	}		/**	 * 更新关联链接缓存方法	 */	public function keylink() {		$infos = $this->db->select('','word,url','','keylinkid ASC');		$datas = $rs = array();		foreach($infos as $r) {			$rs[0] = $r['word'];			$rs[1] = $r['url'];			$datas[] = $rs;		}		setcache('keylink', $datas, 'commons');		return true;	}		/**	 * 更新联动菜单缓存方法	 */	public function linkage() {		$infos = $this->db->select(array('keyid'=>0));		foreach ($infos as $r) {			$linkageid = intval($r['linkageid']);			$r = $this->db->get_one(array('linkageid'=>$linkageid),'name,siteid,style');			$info['title'] = $r['name'];			$info['style'] = $r['style'];			$info['siteid'] = $r['siteid'];			$info['data'] = $this->submenulist($linkageid);			setcache($linkageid, $info,'linkage');		}		return true;	}		/**	 * 子菜单列表	 * @param intval $keyid 菜单id	 */	public function submenulist($keyid=0) {		$keyid = intval($keyid);		$datas = array();		$where = ($keyid > 0) ? array('keyid'=>$keyid) : '';		$result = $this->db->select($where,'*','','listorder ,linkageid');		foreach($result as $r) {			$datas[$r['linkageid']] = $r;		}		return $datas;	}		/**	 * 更新推荐位缓存方法	 */	public function position () {		$infos = $this->db->select('','*',1000,'listorder DESC');		foreach ($infos as $info){			$positions[$info['posid']] = $info;		}		setcache('position', $positions,'commons');		return $infos;	}		/**	 * 更新投票配置	 */	public function vote_setting() {		$m_db = pc_base::load_model('module_model');		$data = $m_db->select(array('module'=>'vote'));		$setting = string2array($data[0]['setting']);		setcache('vote', $setting, 'commons');	}		/**	 * 更新友情链接配置	 */	public function link_setting() {		$m_db = pc_base::load_model('module_model');		$data = $m_db->select(array('module'=>'link'));		$setting = string2array($data[0]['setting']);		setcache('link', $setting, 'commons');	}		/**	 * 更新管理员角色缓存方法	 */	public function admin_role() {		$infos = $this->db->select(array('disabled'=>'0'), $data = '`roleid`,`rolename`', '', 'roleid ASC');		foreach ($infos as $info){			$role[$info['roleid']] = $info['rolename'];		}		$this->cache_siteid($role);		setcache('role', $role,'commons');		return $infos;	}		/**	 * 更新管理员角色缓存方法	 */	public function cache_siteid($role) {		$priv_db = pc_base::load_model('admin_role_priv_model');		$sitelist = array();		foreach($role as $n=>$r) {			$sitelists = $priv_db->select(array('roleid'=>$n),'siteid', '', 'siteid');			foreach($sitelists as $site) {				foreach($site as $v){					$sitelist[$n][] = intval($v);				}			}		}		$sitelist = @array_map("array_unique", $sitelist);		setcache('role_siteid', $sitelist,'commons');		return $sitelist;	}		/**	 * 更新url规则缓存方法	 */	public function urlrule() {		$datas = $this->db->select('','*','','','','urlruleid');		$basic_data = array();		foreach($datas as $roleid=>$r) {			$basic_data[$roleid] = $r['urlrule'];;		}		setcache('urlrules_detail',$datas,'commons');		setcache('urlrules',$basic_data,'commons');	}		/**	 * 更新模块缓存方法	 */	public function module() {		$modules = array();		$modules = $this->db->select(array('disabled'=>0), '*', '', '', '', 'module');		setcache('modules', $modules, 'commons');		return true;	}		/**	 * 更新模型缓存方法	 */	public function sitemodel() {		define('MODEL_PATH', PC_PATH.'modules'.DIRECTORY_SEPARATOR.'content'.DIRECTORY_SEPARATOR.'fields'.DIRECTORY_SEPARATOR);		define('CACHE_MODEL_PATH', PHPCMS_PATH.'caches'.DIRECTORY_SEPARATOR.'caches_model'.DIRECTORY_SEPARATOR.'caches_data'.DIRECTORY_SEPARATOR);		require MODEL_PATH.'fields.inc.php';		//更新内容模型类:表单生成、入库、更新、输出		$classtypes = array('form','input','update','output');		foreach($classtypes as $classtype) {			$cache_data = file_get_contents(MODEL_PATH.'content_'.$classtype.'.class.php');			$cache_data = str_replace('}?>','',$cache_data);			foreach($fields as $field=>$fieldvalue) {				if(file_exists(MODEL_PATH.$field.DIRECTORY_SEPARATOR.$classtype.'.inc.php')) {					$cache_data .= file_get_contents(MODEL_PATH.$field.DIRECTORY_SEPARATOR.$classtype.'.inc.php');				}			}			$cache_data .= "\r\n } \r\n?>";			file_put_contents(CACHE_MODEL_PATH.'content_'.$classtype.'.class.php',$cache_data);			chmod(CACHE_MODEL_PATH.'content_'.$classtype.'.class.php',0777);		}		//更新模型数据缓存		$model_array = array();		$datas = $this->db->select(array('type'=>0));		foreach ($datas as $r) {			$model_array[$r['modelid']] = $r;			$this->sitemodel_field($r['modelid']);		}		setcache('model', $model_array, 'commons');		return true;	}		/**	 * 更新模型字段缓存方法	 */	public function sitemodel_field($modelid) {		$field_array = array();		$db = pc_base::load_model('sitemodel_field_model');		$fields = $db->select(array('modelid'=>$modelid,'disabled'=>0),'*',100,'listorder ASC');		foreach($fields as $_value) {			$setting = string2array($_value['setting']);			$_value = array_merge($_value,$setting);			$field_array[$_value['field']] = $_value;		}		setcache('model_field_'.$modelid,$field_array,'model');		return true;	}		/**	 * 更新类别缓存方法	 */	public function type($param = '') {		$datas = array();		$result_datas = $this->db->select(array('siteid'=>get_siteid(),'module'=>$param),'*',1000,'listorder ASC,typeid ASC');		foreach($result_datas as $_key=>$_value) {			$datas[$_value['typeid']] = $_value;		}		if ($param=='search') {			$this->search_type();		} else {			setcache('type_'.$param, $datas, 'commons');		}		return true;	}		/**	 * 更新工作流缓存方法	 */	public function workflow() {		$datas = array();		$workflow_datas = $this->db->select(array('siteid'=>get_siteid()),'*',1000);		foreach($workflow_datas as $_k=>$_v) {			$datas[$_v['workflowid']] = $_v;		}		setcache('workflow_'.get_siteid(),$datas,'commons');		return true;	}		/**	 * 更新数据源缓存方法	 */	public function dbsource() {		$db = pc_base::load_model('dbsource_model');		$list = $db->select();		$data = array();		if ($list) {			foreach ($list as $val) {				$data[$val['name']] = array('hostname'=>$val['host'].':'.$val['port'], 'database' =>$val['dbname'] , 'db_tablepre'=>$val['dbtablepre'], 'username' =>$val['username'],'password' => $val['password'],'charset'=>$val['charset'],'debug'=>0,'pconnect'=>0,'autoconnect'=>0);			}		} else {			return false;		}		return setcache('dbsource', $data, 'commons');	}		/**	 * 更新会员组缓存方法	 */	public function member_group() {		$grouplist = $this->db->listinfo('', '', 1, 100, 'groupid');		setcache('grouplist', $grouplist,'member');		return true;	}		/**	 * 更新会员配置缓存方法	 */	public function member_setting() {		$this->db = pc_base::load_model('module_model');		$member_setting = $this->db->get_one(array('module'=>'member'), 'setting');		$member_setting = string2array($member_setting['setting']);		setcache('member_setting', $member_setting, 'member');		return true;	}		/**	 * 更新会员模型缓存方法	 */	public function membermodel() {		define('MEMBER_MODEL_PATH',PC_PATH.'modules'.DIRECTORY_SEPARATOR.'member'.DIRECTORY_SEPARATOR.'fields'.DIRECTORY_SEPARATOR);		//模型缓存路径		define('MEMBER_CACHE_MODEL_PATH',PHPCMS_PATH.'caches'.DIRECTORY_SEPARATOR.'caches_model'.DIRECTORY_SEPARATOR.'caches_data'.DIRECTORY_SEPARATOR);				$sitemodel_db = pc_base::load_model('sitemodel_model');		$data = $sitemodel_db->select(array('type'=>2), "*", 1000, 'sort', '', 'modelid');		setcache('member_model', $data, 'commons');				require MEMBER_MODEL_PATH.'fields.inc.php';		//更新内容模型类:表单生成、入库、更新、输出		$classtypes = array('form','input','update','output');		foreach($classtypes as $classtype) {			$cache_data = file_get_contents(MEMBER_MODEL_PATH.'member_'.$classtype.'.class.php');			$cache_data = str_replace('}?>','',$cache_data);			foreach($fields as $field=>$fieldvalue) {				if(file_exists(MEMBER_MODEL_PATH.$field.DIRECTORY_SEPARATOR.$classtype.'.inc.php')) {					$cache_data .= file_get_contents(MEMBER_MODEL_PATH.$field.DIRECTORY_SEPARATOR.$classtype.'.inc.php');				}			}			$cache_data .= "\r\n } \r\n?>";			file_put_contents(MEMBER_CACHE_MODEL_PATH.'member_'.$classtype.'.class.php',$cache_data);			chmod(MEMBER_CACHE_MODEL_PATH.'member_'.$classtype.'.class.php',0777);		}				return true;	}		/**	 * 更新会员模型字段缓存方法	 */	public function member_model_field() {		$member_model = getcache('member_model', 'commons');		$this->db = pc_base::load_model('sitemodel_field_model');		foreach ($member_model as $modelid => $m) {			$field_array = array();			$fields = $this->db->select(array('modelid'=>$modelid,'disabled'=>0),'*',100,'listorder ASC');			foreach($fields as $_value) {				$setting = string2array($_value['setting']);				$_value = array_merge($_value,$setting);				$field_array[$_value['field']] = $_value;			}			setcache('model_field_'.$modelid,$field_array,'model');		}		return true;	}		/**	 * 更新搜索配置缓存方法	 */	public function search_setting() {			$this->db = pc_base::load_model('module_model');		$setting = $this->db->get_one(array('module'=>'search'), 'setting');		$setting = string2array($setting['setting']);		setcache('search', $setting, 'search');		return true;	}		/**	 * 更新搜索类型缓存方法	 */	public function search_type() {		$sitelist = getcache('sitelist','commons');		foreach ($sitelist as $siteid=>$_v) {			$datas = $search_model = array();			$result_datas = $result_datas2 = $this->db->select(array('siteid'=>$siteid,'module'=>'search'),'*',1000,'listorder ASC');			foreach($result_datas as $_key=>$_value) {				if(!$_value['modelid']) continue;				$datas[$_value['modelid']] = $_value['typeid'];				$search_model[$_value['modelid']]['typeid'] = $_value['typeid'];				$search_model[$_value['modelid']]['name'] = $_value['name'];				$search_model[$_value['modelid']]['sort'] = $_value['listorder'];			}			setcache('type_model_'.$siteid,$datas,'search');			$datas = array();				foreach($result_datas2 as $_key=>$_value) {				if($_value['modelid']) continue;				$datas[$_value['typedir']] = $_value['typeid'];				$search_model[$_value['typedir']]['typeid'] = $_value['typeid'];				$search_model[$_value['typedir']]['name'] = $_value['name'];			}			setcache('type_module_'.$siteid,$datas,'search');			//搜索header头中使用类型缓存			setcache('search_model_'.$siteid,$search_model,'search');		}		return true;	}		/**	 * 更新专题缓存方法	 */	public function special() {		$specials = array();		$result = $this->db->select(array('disabled'=>0), '`id`, `siteid`, `title`, `url`, `thumb`, `banner`, `ishtml`', '', '`listorder` DESC, `id` DESC');		foreach($result as $r) {			$specials[$r['id']] = $r;		}		setcache('special', $specials, 'commons');		return true;	}		/**	 * 更新网站配置方法	 */	public function setting() {		$this->db = pc_base::load_model('module_model');		$result = $this->db->get_one(array('module'=>'admin'));		$setting = string2array($result['setting']);		setcache('common', $setting,'commons');		return true;	}		/**	 * 更新数据源模型缓存方法	 */	public function database() {		$module = $M = array();		$M = getcache('modules', 'commons');		if (is_array($M)) {			foreach ($M as $key => $m) {				if (file_exists(PC_PATH.'modules'.DIRECTORY_SEPARATOR.$key.DIRECTORY_SEPARATOR.'classes'.DIRECTORY_SEPARATOR.$key.'_tag.class.php') && !in_array($key, array('message', 'block'))) {					$module[$key] = $m['name'];				}			}		}		$filepath = CACHE_PATH.'configs/';		$module = "<?php\nreturn ".var_export($module, true).";\n?>";		return $file_size = pc_base::load_config('system','lock_ex') ? file_put_contents($filepath.'modules.php', $module, LOCK_EX) : file_put_contents($filepath.'modules.php', $module);	}		/**	 * 根据数据库记录更新缓存	 */	public function cache2database() {		$cache = pc_base::load_model('cache_model');		if (!isset($_GET['pages']) && empty($_GET['pages'])) {			$r = $cache->get_one(array(), 'COUNT(*) AS num');			if ($r['num']) {				$total = $r['num'];				$pages = ceil($total/20);			} else {				$pages = 1;			}		} else {			$pages = intval($_GET['pages']);		}		$currpage = max(intval($_GET['currpage']), 1);		$offset = ($currpage-1)*20;		$result = $cache->select(array(), '*', $offset.', 20', 'filename ASC');		if (is_array($result) && !empty($result)) {			foreach ($result as $re) {				if (!file_exists(CACHE_PATH.$re['path'].$re['filename'])) {					$filesize = pc_base::load_config('system','lock_ex') ? file_put_contents(CACHE_PATH.$re['path'].$re['filename'], $re['data'], LOCK_EX) : file_put_contents(CACHE_PATH.$re['path'].$re['filename'], $re['data']);				} else {					continue;				}			}		}		$currpage++;		if ($currpage>$pages) {			return true;		} else {			echo '<script type="text/javascript">window.parent.addtext("<li>'.L('part_cache_success').($currpage-1).'/'.$pages.'..........</li>");</script>';			showmessage(L('part_cache_success'), '?m=admin&c=cache_all&a=init&page='.$_GET['page'].'&currpage='.$currpage.'&pages='.$pages.'&dosubmit=1',0);		}	}		/**	 * 更新删除缓存文件方法	 */	public function del_file() {		$path = PHPCMS_PATH.'caches'.DIRECTORY_SEPARATOR.'caches_template'.DIRECTORY_SEPARATOR;		$files = glob($path.'*');		pc_base::load_sys_func('dir');		if (is_array($files)) {			foreach ($files as $f) {				$dir = basename($f);				if (!in_array($dir, array('block', 'dbsource'))) {					dir_delete($path.$dir);				}			}		}		$path = PHPCMS_PATH.'caches'.DIRECTORY_SEPARATOR.'caches_tpl_data'.DIRECTORY_SEPARATOR.'caches_data'.DIRECTORY_SEPARATOR;		$files = glob($path.'*');		if (is_array($files)) {			foreach ($files as $f) {				$dir = basename($f);				@unlink($path.$dir);			}		}		return true;	}	/**	 * 更新来源缓存方法	 */	public function copyfrom() {		$infos = $this->db->select('','*','','listorder DESC','','id');		setcache('copyfrom', $infos, 'admin');		return true;	}	/**	 * 同步视频模型栏目	 */	public function video_category_tb() {		if (module_exists('video')) {			$setting = getcache('video', 'video');			pc_base::load_app_class('ku6api', 'video', 0);			$ku6api = new ku6api($setting['sn'], $setting['skey']);			$ku6api->get_categorys();		}		return true;	}}
 |