www.gusucode.com > 08CMS空白站群系统 3.3 繁体 UTF-8 > upload/include/cache.fun.php
<?php !defined('M_COM') && exit('No Permission'); function rebuild_cache($sid = 0,$menuurl = '',$mainurl = ''){//$sid = -1为整站缓存更新 //系统固化的缓存有fieldwords,ibtagnames,nouserinfos,langs,clangs,mlangs,//特殊情况uclassarr,payonlines //不区分子站的缓存 $cacarr = array( 'channels','fchannels','mchannels','players','fcatalogs','currencys','grouptypes','cotypes','rprojects','permissions', 'crprojects','initfields','initmfields','mtconfigs','amconfigs','commus','sitemaps','shipings','mconfigs', 'localfiles','crprices','cafields','ccfields','pfields','vcatalogs','badwords','wordlinks','dbsources','splangs', 'subsites','mmenus','mprojects','uprojects','freeinfos','userurls','dbfields', ); foreach($cacarr as $k) updatecache($k); foreach(array(0,1) as $k) updatecache('menus',$k);//后台菜单 foreach(array('fields','mfields','cafields','ccfields','ffields','pfields') as $k) updatecache('usednames',$k); $vars = array_keys(reload_cache('channels')); foreach($vars as $k) updatecache('fields',$k); $vars = array_keys(reload_cache('fchannels')); foreach($vars as $k) updatecache('ffields',$k); $vars = array_keys(reload_cache('mchannels')); foreach($vars as $k) updatecache('mfields',$k); $vars = array_keys(reload_cache('grouptypes')); foreach($vars as $k) updatecache('usergroups',$k); $vars = array_keys(reload_cache('cotypes')); foreach($vars as $k) updatecache('coclasses',$k); updatecache('btagnames'); //处理需要区分子站的缓存 if($sid == -1){ $sids = array_keys(reload_cache('subsites')); $sids[] = 0; }else $sids = array($sid); $s_cacarr = array('catalogs','altypes','cnconfigs','cnodes','gmodels','gmissions',); foreach($sids as $v){ foreach($s_cacarr as $k) updatecache($k,'',$v); } //通常修改了管理后台菜单缓存之后需要刷新页面 if(!empty($menuurl) && !empty($mainurl)){ echo "<script>parent.menu.location='".$menuurl."';parent.main.location='".$mainurl."';</script>"; } } function updatecache($cname,$mode='',$sid=0){ global $db,$tblprefix; switch($cname){ case 'subsites': $$cname = mfetch_array('subsites','sid','*','','vieworder,sid','channels,commus'); cache2file($$cname,$cname); break; case 'channels': $$cname = mfetch_array('channels','chid','*','','chid','','ugids'); sub_cache($$cname,'','chid','channel','chid,cname,available,userforbidadd,cuid,baidu,fulltxt'); cache2file($$cname,$cname); break; case 'fchannels': $$cname = mfetch_array('fchannels','chid','*','','chid'); cache2file($$cname,$cname); break; case 'fcatalogs': $$cname = mfetch_array('fcatalogs','caid','*','','vieworder,caid','','ugids'); sub_cache($$cname,'','caid','fcatalog','caid,title,vieworder,chid,cumode,allowupdate'); cache2file($$cname,$cname); break; case 'mchannels': $$cname = mfetch_array('mchannels','mchid','*','','mchid'); cache2file($$cname,$cname); break; case 'dbsources': $$cname = mfetch_array('dbsources','dsid','*','','dsid'); cache2file($$cname,$cname); break; case 'players': $$cname = mfetch_array('players','plid','*','','vieworder,plid'); sub_cache($$cname,'','plid','player','plid,cname,ptype,issystem,available,vieworder,exts'); cache2file($$cname,$cname); break; case 'gmodels': $$cname = mfetch_array('gmodels','gmid','*',"sid=$sid",'gmid','gfields'); sub_cache($$cname,'','gmid','gmodel','cname,chid,atid',$sid); cache2file($$cname,$cname,'',$sid); break; case 'gmissions': $$cname = mfetch_array('gmissions','gsid','*',"sid=$sid",'gsid','fsettings,dvalues'); sub_cache($$cname,'','gsid','gmission','cname,gmid',$sid); cache2file($$cname,$cname,'',$sid); break; case 'altypes': $$cname = mfetch_array('altypes','atid','*',"sid=$sid",'vieworder,atid','','chids,atids,ugids'); sub_cache($$cname,'','atid','altype','atid,sid,cname,chid,vieworder',$sid); cache2file($$cname,$cname,'',$sid); $aaltypes = mfetch_array('altypes','atid','atid,sid,cname,chid','','sid,vieworder,atid'); cache2file($aaltypes,'aaltypes'); break; case 'catalogs': include_once M_ROOT."./include/parse/general.php"; $catalogs = mfetch_array('catalogs','caid','*',"sid=$sid",'vieworder,caid'); $catalogs = order_arr($catalogs,0); arr_tag2atm($catalogs,'ca'); sub_cache($catalogs,'','caid','catalog','caid,pid,sid,level,title,dirname,vieworder,chids,atids,isframe',$sid); cache2file($catalogs,$cname,'',$sid); $acatalogs = mfetch_array('catalogs','caid','caid,pid,sid,level,title,dirname,isframe','','sid,vieworder,caid'); $acatalogs = order_arr($acatalogs,0); cache2file($acatalogs,'acatalogs'); break; case 'currencys': $$cname = mfetch_array('currencys','crid','*','','crid'); cache2file($$cname,$cname); break; case 'grouptypes': $$cname = mfetch_array('grouptypes','gtid','*','','gtid'); cache2file($$cname,$cname); break; case 'usergroups': $$cname = mfetch_array('usergroups','ugid','*',"gtid='$mode'",'currency DESC,prior,ugid'); sub_cache($$cname,$mode,'ugid','usergroup','ugid,cname,currency,prior,mchids,limitday'); cache2file($$cname,$cname.$mode,$cname); break; case 'cotypes': $$cname = mfetch_array('cotypes','coid','*','','vieworder,coid'); cache2file($$cname,$cname); break; case 'coclasses': include_once M_ROOT."./include/parse/general.php"; $coclasses = mfetch_array('coclass','ccid','*',"coid='$mode'",'vieworder','conditions'); $coclasses = order_arr($coclasses,0); arr_tag2atm($coclasses,'cc'); sub_cache($coclasses,$mode,'ccid','coclass','ccid,pid,level,title,dirname,vieworder,chids,atids,isframe'); cache2file($coclasses,$cname.$mode,$cname); break; case 'splangs': $$cname = mfetch_array('splangs','ename','*','','vieworder,slid'); foreach($splangs as $k => $v) $splangs[$k] = $v['content']; cache2file($$cname,$cname); break; case 'rprojects': $$cname = mfetch_array('rprojects','rpid','*','','rpid','rmfiles','excludes'); cache2file($$cname,$cname); break; case 'mprojects': $$cname = mfetch_array('mprojects','mpid','*','','mpid'); cache2file($$cname,$cname); break; case 'uprojects': $$cname = mfetch_array('uprojects','upid','*','','gtid,upid'); cache2file($$cname,$cname); break; case 'permissions': $$cname = mfetch_array('permissions','pmid','*','','prior DESC,pmid','','aread,cread,issue,download,play'); cache2file($$cname,$cname); break; case 'cnconfigs': $$cname = mfetch_array('cnconfigs','cncid','*',"sid=$sid",'cncid','idsarr'); cache2file($$cname,$cname,'',$sid); break; case 'crprojects': $$cname = mfetch_array('crprojects','crpid','*','','crpid'); cache2file($$cname,$cname); break; case 'initfields': $$cname = mfetch_array('fields','ename','*','chid=0','issystem DESC,fid ASC'); cache2file($$cname,$cname); break; case 'initmfields': $$cname = mfetch_array('mfields','ename','*','mchid=0','issystem DESC,mfid ASC'); cache2file($$cname,$cname); break; case 'mtconfigs': $$cname = mfetch_array('mtconfigs','mtcid','*','','mtcid','setting'); cache2file($$cname,$cname); break; case 'amconfigs': $$cname = mfetch_array('amconfigs','amcid','*','','amcid'); cache2file($$cname,$cname); break; case 'commus': $$cname = mfetch_array('commus','cuid','*','','issystem DESC,cuid ASC','setting'); sub_cache($$cname,'','cuid','commu','cuid,cname,cclass,available,sortable,ch'); cache2file($$cname,$cname); break; case 'sitemaps': $$cname = mfetch_array('sitemaps','ename','*','','vieworder','setting'); cache2file($$cname,$cname); break; case 'shipings': $$cname = mfetch_array('shipings','shid','*','','vieworder,shid'); cache2file($$cname,$cname); break; case 'cnodes': $$cname = mfetch_array('cnodes','ename','*',"sid=$sid AND inconfig='1'",'ename'); sub_cache($$cname,'','ename','cnode','',$sid); cache2file($$cname,$cname,'',$sid); break; case 'freeinfos': $$cname = mfetch_array('freeinfos','fid','*','','fid'); cache2file($$cname,$cname); break; case 'mconfigs': global $mcharset,$cms_version,$homedefault; $btags = array(); $$cname = mfetch_array('mconfigs','varname','*',"cftype<>''",'cftype'); $bvarnames = array('hostname','hosturl','cmsname','cmsurl','cmslogo','cmstitle','cmskeyword', 'cmsdescription','cms_icpno','bazscert','copyright',); foreach($mconfigs as $k => $v){ $mconfigs[$k] = $v['value']; in_array($k,$bvarnames) && $btags[$k] = $v['value']; } $mconfigs['cmsindex'] = $btags['cmsindex'] = $homedefault; $mconfigs['cms_abs'] = $btags['cms_abs'] = strpos($mconfigs['cmsurl'],$mconfigs['hosturl']) === FALSE ? ($mconfigs['hosturl'].$mconfigs['cmsurl']) : $mconfigs['cmsurl']; $mconfigs['cms_rel'] = $btags['cms_rel'] = strpos($mconfigs['cmsurl'],$mconfigs['hosturl']) === FALSE ? $mconfigs['cmsurl'] : str_replace($mconfigs['hosturl'],'',$mconfigs['cmsurl']); $btags['mcharset'] = $mcharset; $btags['version'] = $cms_version; $btags['tplurl'] = $mconfigs['cms_abs'].'template/'.$mconfigs['templatedir'].'/'; $btags['cms_counter'] = "<script type=\"text/javascript\" src=\"$mconfigs[cms_abs]counter.php\"></script>"; cache2file($btags,'btags'); cache2file($$cname,$cname); break; case 'localfiles': $inits = mfetch_array('localfiles','lfid','*','','lfid'); foreach($inits as $v){ $localfiles[$v['ftype']][$v['extname']] = $v; } cache2file($$cname,$cname); break; case 'fields': $$cname = mfetch_array('fields','ename','*',"chid='$mode'",'vieworder,issystem DESC,mcommon DESC,fid ASC'); sub_cache($$cname,$mode,'ename','field','cname,issystem,isfunc,available,iscustom,mcommon,tbl,datatype,isadmin,aedit,issearch,vieworder,istxt'); cache2file($$cname,$cname.$mode,$cname); break; case 'mfields': $$cname = mfetch_array('mfields','ename','*',"mchid='$mode'",'vieworder,issystem DESC,mcommon DESC,mfid ASC'); sub_cache($$cname,$mode,'ename','mfield','cname,issystem,isfunc,available,iscustom,mcommon,tbl,datatype,isadmin,vieworder'); cache2file($$cname,$cname.$mode,$cname); break; case 'ffields': $$cname = mfetch_array('ffields','ename','*',"chid='$mode'",'vieworder,issystem DESC,fid ASC'); sub_cache($$cname,$mode,'ename','ffield','cname,issystem,isfunc,available,datatype,isadmin,vieworder'); cache2file($$cname,$cname.$mode,$cname); break; case 'crprices': $$cname = mfetch_array('crprices','ename','*','','crid,crvalue'); $vcps = array('tax' => array(),'sale' => array(),'award' => array(),'ftax' => array(),'fsale' => array(),); foreach($crprices as $k => $v){ foreach(array('tax','sale','award','ftax','fsale') as $var){ $v[$var] && $vcps[$var][$v['ename']] = $v['cname']; } } cache2file($vcps,'vcps'); cache2file($$cname,$cname); break; case 'cafields': $$cname = mfetch_array('cnfields','ename','*','iscc=0','vieworder,fid'); cache2file($$cname,$cname); break; case 'ccfields': $$cname = mfetch_array('cnfields','ename','*','iscc=1','vieworder,fid'); cache2file($$cname,$cname); break; case 'pfields': $$cname = mfetch_array('cufields','ename','*',"cu=1",'vieworder,fid'); cache2file($$cname,$cname); break; case 'btagnames': deal_btagnames(); break; case 'vcatalogs': $$cname = mfetch_array('vcatalogs','caid','*','','vieworder,caid'); cache2file($$cname,$cname); break; case 'badwords': $badwords = array(); $query = $db->query("SELECT * FROM {$tblprefix}badwords ORDER BY bwid"); while($badword = $db->fetch_array($query)){ $badwords['wreplace'][] = $badword['wreplace']; $badword['wsearch'] = preg_replace("/\\\{(\d+)\\\}/", ".{0,\\1}", preg_quote($badword['wsearch'],'/')); $badwords['wsearch'][] = '/'.$badword['wsearch'].'/i'; } cache2file($$cname,$cname); break; case 'wordlinks': $wordlinks = array(); $query = $db->query("SELECT * FROM {$tblprefix}wordlinks WHERE available=1 ORDER BY pcs DESC,wlid ASC"); while($wordlink = $db->fetch_array($query)){ $wordlinks['swords'][] = $wordlink['sword']; $wordlinks['rwords'][] = "<a href=\"".view_url($wordlink['url'])."\" target=\"_blank\">".$wordlink['sword']."</a>"; } cache2file($$cname,$cname); break; case 'dbfields': $dbfields = array(); $query = $db->query("SELECT * FROM {$tblprefix}dbfields ORDER BY dfid"); while($row = $db->fetch_array($query)){ $dbfields[$row['ddtable'].'_'.$row['ddfield']] = $row['ddcomment']; } cache2file($$cname,$cname); break; case 'usednames': $$cname = reload_cache($cname); $arr = array('fields' => 'archives,archives_sub','mfields' => 'members,members_sub','cafields' => 'catalogs','ccfields' => 'coclass','ffields' => 'farchives','pfields' => 'orders'); $usednames[$mode] = mfetch_fields($arr[$mode]); cache2file($$cname,$cname); break; case 'menus': $mhcac = 'mnheaders'.($mode ? 's' : ''); $mmcac = 'mnmenus'.($mode ? 's' : ''); $mlcac = 'mnlangs'.($mode ? 's' : ''); ${$mhcac} = ${$mmcac} = ${$mlcac} = array(); $query = $db->query("SELECT * FROM {$tblprefix}mtypes WHERE pid=0 AND issub='$mode' ORDER BY vieworder,mtid"); while($row0 = $db->fetch_array($query)){ ${$mhcac}[$row0['mtid']] = $row0['url']; ${$mlcac}['menutype_'.$row0['mtid']] = $row0['title']; ${$mmcac}[$row0['mtid']] = array(); $query1 = $db->query("SELECT * FROM {$tblprefix}mtypes WHERE pid='$row0[mtid]' AND issub='$mode' ORDER BY vieworder,mtid"); while($row1 = $db->fetch_array($query1)){ ${$mlcac}['menutype_'.$row1['mtid']] = $row1['title']; ${$mmcac}[$row0['mtid']][$row1['mtid']] = array(); $query2 = $db->query("SELECT * FROM {$tblprefix}menus WHERE mtid='$row1[mtid]' AND available=1 AND issub='$mode' AND isbk='0' ORDER BY vieworder,mnid"); while($row2 = $db->fetch_array($query2)){ ${$mlcac}['menuitem_'.$row2['mnid']] = $row2['title']; ${$mmcac}[$row0['mtid']][$row1['mtid']][$row2['mnid']] = $row2['url']; } if(empty(${$mmcac}[$row0['mtid']][$row1['mtid']])) unset(${$mmcac}[$row0['mtid']][$row1['mtid']]); } if(empty(${$mmcac}[$row0['mtid']])) unset(${$mhcac}[$row0['mtid']],${$mmcac}[$row0['mtid']]); } foreach(array($mhcac,$mmcac,$mlcac) as $var) cache2file(${$var},$var); break; case 'userurls': $utypes = mfetch_array('utypes','utid','*','','vieworder,utid'); foreach($utypes as $k => $v){ if(!$v['pid']) $utypes[$k]['url'] = !$v['ismc'] ? "?entry=userlinks&utid=$k" : "?action=userlinks&utid=$k"; } $utypes = order_arr($utypes,0); cache2file($utypes,'utypes'); $userurls = mfetch_array('userurls','uid','*','','vieworder,uid'); cache2file($userurls,'userurls'); break; case 'mmenus': $mmnmenus = $mmnlangs = array(); $query = $db->query("SELECT * FROM {$tblprefix}mmtypes ORDER BY vieworder,mtid"); while($row0 = $db->fetch_array($query)){ $mmnlangs['mmenutype_'.$row0['mtid']] = $row0['title']; $query1 = $db->query("SELECT * FROM {$tblprefix}mmenus WHERE mtid='$row0[mtid]' AND available=1 ORDER BY vieworder,mnid"); while($row1 = $db->fetch_array($query1)){ $mmnlangs['mmenuitem_'.$row1['mnid']] = $row1['title']; $mmnmenus[$row0['mtid']][$row1['mnid']] = $row1['url']; } } cache2file($mmnmenus,'mmnmenus'); cache2file($mmnlangs,'mmnlangs'); break; } } function mfetch_array($tbl,$key,$fieldstr = '',$where = '',$orderby = '',$unserializes = '',$explodes = ''){ global $db,$tblprefix; $rets = array(); if(empty($tbl) || empty($key)) return $rets; !$fieldstr && $fieldstr = '*'; $sqlstr = "SELECT $fieldstr FROM {$tblprefix}$tbl".(empty($where) ? '' : " WHERE $where").(empty($orderby) ? '' : " ORDER BY $orderby"); $query = $db->query($sqlstr); while($row = $db->fetch_array($query)){ if($unserializes && is_array($unarr = array_filter(explode(',',$unserializes)))){ foreach($unarr as $v){ if(empty($row[$v]) || !is_array($row[$v] = @unserialize($row[$v]))) $row[$v] = array(); } } if($explodes && is_array($exarr = array_filter(explode(',',$explodes)))){ foreach($exarr as $v){ $row[$v] = $row[$v] == '' ? array() : explode(',',$row[$v]); } } $rets[$row[$key]] = $row; } return $rets; } function mfetch_one($tbl,$where,$fstr='*',$unserializes = '',$explodes = ''){ global $db,$tblprefix; $rets = array(); if(!$tbl || !$where || !$fstr) return $rets; if($rets = $db->fetch_one("SELECT $fstr FROM {$tblprefix}$tbl WHERE $where")){ if($unserializes && is_array($arr = array_filter(explode(',',$unserializes)))){ foreach($arr as $v){ if(empty($rets[$v]) || !is_array($rets[$v] = @unserialize($rets[$v]))) $rets[$v] = array(); } } if($explodes && is_array($arr = array_filter(explode(',',$explodes)))){ foreach($arr as $v){ $rets[$v] = $rets[$v] == '' ? array() : explode(',',$rets[$v]); } } } return $rets; } function mfetch_fields($tbls = ''){ global $db,$tblprefix; $fields = array(); if($tbls && is_array($tblarr = explode(',',$tbls))){ foreach($tblarr as $table){ $query = $db->query("SELECT * FROM {$tblprefix}$table"); while($field = $db->fetch_fields($query)){ $fields[] = $field->name; } } $fields = array_unique($fields); } return $fields; } function deal_btagnames(){ global $commus; load_cache('commus'); $btagnames = reload_cache('ibtagnames'); $commoned = 0; $channels = reload_cache('channels'); foreach($channels as $chid => $channel){ $fields = reload_cache('fields',$chid); foreach($fields as $k => $field){ if($field['mcommon']){ !$commoned && $btagnames[] = array('ename' => $k,'cname' => $field['cname'],'bclass' => 'archive','sclass' => '','datatype' => $field['datatype'],); }else{ $btagnames[] = array('ename' => $k,'cname' => $field['cname'],'bclass' => 'archive','sclass' => $chid,'datatype' => $field['datatype'],); } } if(@$commus[$channel['cuid']]['cclass'] == 'answer'){ $btagnames[] = array('ename' => 'appeals','cname' => lang('appeal amount'),'bclass' => 'archive','sclass' => $chid,'datatype' => 'int',); $btagnames[] = array('ename' => 'appealdate','cname' => lang('appeal end time'),'bclass' => 'archive','sclass' => $chid,'datatype' => 'date',); } $commoned = 1; } unset($channels,$fields); $commoned = 0; $fchannels = reload_cache('fchannels'); foreach($fchannels as $chid => $fchannel){ $fields = reload_cache('ffields',$chid); foreach($fields as $k => $field){ if($k == 'subject'){ !$commoned && $btagnames[] = array('ename' => $k,'cname' => $field['cname'],'bclass' => 'freeinfo','sclass' => '','datatype' => $field['datatype'],); }else{ $btagnames[] = array('ename' => $k,'cname' => $field['cname'],'bclass' => 'freeinfo','sclass' => $chid,'datatype' => $field['datatype'],); } } $commoned = 1; } unset($fchannels,$fields); $cotypes = reload_cache('cotypes'); foreach($cotypes as $coid =>$cotype){ $btagnames[] = array('ename' => 'cotype'.$coid.'title','cname' => $cotype['cname'].lang('coclass cname'),'bclass' => 'archive','sclass' => '','datatype' => 'text',); $btagnames[] = array('ename' => "cotype$coid",'cname' => $cotype['cname'].lang('coclass').'id','bclass' => 'archive','sclass' => '','datatype' => 'int',); } unset($cotypes,$cotype); $cafields = reload_cache('cafields'); foreach($cafields as $field){ $btagnames[] = array('ename' => $field['ename'],'cname' => $field['cname'],'bclass' => 'cnode','sclass' => 'catalog','datatype' => $field['datatype'],); } unset($cafields,$field); $ccfields = reload_cache('ccfields'); foreach($ccfields as $field){ $btagnames[] = array('ename' => $field['ename'],'cname' => $field['cname'],'bclass' => 'cnode','sclass' => 'coclass','datatype' => $field['datatype'],); } unset($ccfields,$field); $commoned = 0; $mchannels = reload_cache('mchannels'); foreach($mchannels as $chid => $mchannel){ $mfields = reload_cache('mfields',$chid); foreach($mfields as $k => $field){ if($field['mcommon']){ (!$commoned && !in_array($k,array('password'))) && $btagnames[] = array('ename' => $k,'cname' => $field['cname'],'bclass' => 'member','sclass' => '','datatype' => $field['datatype'],); }else{ $btagnames[] = array('ename' => $k,'cname' => $field['cname'],'bclass' => 'member','sclass' => $chid,'datatype' => $field['datatype'],); } } $commoned = 1; } unset($mchannels,$mfields,$field); $currencys = reload_cache('currencys'); foreach($currencys as $crid => $currency){ $btagnames[] = array('ename' => 'currency'.$crid,'cname' => $currency['cname'].lang('amount'),'bclass' => 'member','sclass' => '','datatype' => 'int',); } unset($currencys,$currency); $grouptypes = reload_cache('grouptypes'); foreach($grouptypes as $gtid =>$grouptype){ $btagnames[] = array('ename' => 'grouptype'.$gtid,'cname' => $grouptype['cname'].lang('usergroup').'id','bclass' => 'member','sclass' => '','datatype' => 'int',); $btagnames[] = array('ename' => 'grouptype'.$gtid.'name','cname' => $grouptype['cname'].lang('usergroup'),'bclass' => 'member','sclass' => '','datatype' => 'text',); } unset($grouptypes,$grouptype); $bnames = array(); foreach($btagnames as $k => $v){ if(!array_key_exists($v['ename'],$bnames)){ $bnames[$v['ename']] = $v['cname']; }elseif(!in_array($v['cname'],array_filter(explode(' | ',$bnames[$v['ename']])))){ $bnames[$v['ename']] .= ' | '.$v['cname']; } } cache2file($btagnames,'btagnames'); cache2file($bnames,'bnames'); unset($btagnames,$bnames); } ?>