Server : nginx/1.22.1
System : Linux iZwz9daxib3w3i063fw434Z 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 UTC 2020 x86_64
User : www ( 1000)
PHP Version : 7.2.33
Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Directory :  /www/wwwroot/www.jkmold.com/phpcms/modules/admin/classes/
Upload File :
Current Directory [ Writeable ] Root Directory [ Writeable ]


Current File : /www/wwwroot/www.jkmold.com/phpcms/modules/admin/classes/cache_api.class.php
<?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;

	}

}