📄 cache.func.php
字号:
<?php
/*
[DISCUZ!] include/cache.func.php - Discuz! cache system
This is NOT a freeware, use is subject to license terms
Version: 4.0.0
Web: http://www.comsenz.com
Copyright: 2001-2005 Comsenz Technology Ltd.
Last Modified: 2005-4-12 9:17
*/
define('DISCUZ_KERNEL_VERSION', '4.0.0');
define('DISCUZ_KERNEL_RELEASE', '20051216');
if(isset($_GET['kernel_version'])) {
exit('Crossday Discuz! Board<br>Developed Comsenz Technology Ltd<br><br>Version: '.DISCUZ_KERNEL_VERSION.'<br>Release: '.DISCUZ_KERNEL_RELEASE);
} elseif(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
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("/^\-?\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;
}
function updatecache($cachename = '') {
global $db, $bbname, $tablepre;
$cachescript = array
(
'settings' => array('settings'),
'index' => array('announcements', 'onlinelist', 'forumlinks'),
'forumdisplay' => array('announcements_forum', 'globalstick', 'forums', 'icons', 'onlinelist'),
'viewthread' => array('forums', 'usergroups', 'ranks', 'bbcodes', 'smilies', 'fields_thread'),
'post' => array('bbcodes', 'smilies_display', 'smilies', 'icons'),
'blog' => array('usergroups', 'ranks', 'bbcodes', 'smilies'),
'forums' => array('forums'),
'profilefields' => array('fields_required', 'fields_optional'),
'censor' => array('censor'),
'ipbanned' => array('ipbanned'),
'bbcodes' => array('bbcodes', 'smilies'),
'medals' => array('medals')
);
foreach($cachescript as $script => $cachenames) {
if(!$cachename || ($cachename && in_array($cachename, $cachenames))) {
writetocache($script, $cachenames);
}
}
if(!$cachename || $cachename == 'styles') {
$stylevars = array();
$query = $db->query("SELECT * FROM {$tablepre}stylevars");
while($var = $db->fetch_array($query)) {
$stylevars[$var['styleid']][$var['variable']] = $var['substitute'];
}
$query = $db->query("SELECT s.*, t.directory AS tpldir FROM {$tablepre}styles s LEFT JOIN {$tablepre}templates t ON s.templateid=t.templateid");
while($data = $db->fetch_array($query)) {
$data = array_merge($data, $stylevars[$data['styleid']]);
$data['bgcode'] = strpos($data['bgcolor'], '.') ? "background-image: url(\"$data[imgdir]/$data[bgcolor]\")" : "background-color: $data[bgcolor]";
$data['maintablebgcode'] = strpos($data['maintablecolor'], '.') ? "background=\"$data[maintablecolor]\"" : "bgcolor=\"$data[maintablecolor]\"";
$data['catbgcode'] = strpos($data['catcolor'], '.') ? "background-image: url(\"$data[imgdir]/$data[catcolor]\")" : "background-color: $data[catcolor]";
$data['headerbgcode'] = strpos($data['headercolor'], '.') ? "background-image: url(\"$data[imgdir]/$data[headercolor]\")" : "background-color: $data[headercolor]";
$data['boardlogo'] = image($data['boardimg'], $data['imgdir'], "alt=\"$bbname\"");
$data['bold'] = $data['nobold'] ? 'normal' : 'bold';
writetocache($data['styleid'], '', getcachevars($data, 'CONST'), 'style_');
}
}
if(!$cachename || $cachename == 'usergroups') {
$query = $db->query("SELECT * FROM {$tablepre}usergroups u
LEFT JOIN {$tablepre}admingroups a ON u.groupid=a.admingid");
while($data = $db->fetch_array($query)) {
$ratearray = array();
if($data['raterange']) {
foreach(explode("\n", $data['raterange']) as $rating) {
$rating = explode("\t", $rating);
$ratearray[$rating[0]] = array('min' => $rating[1], 'max' => $rating[2], 'mrpd' => $rating[3]);
}
}
$data['raterange'] = $ratearray;
$data['grouptitle'] = $data['color'] ? '<font color="'.$data['color'].'">'.$data['grouptitle'].'</font>' : $data['grouptitle'];
$data['grouptype'] = $data['type'];
$data['grouppublic'] = $data['system'] != 'private';
$data['groupcreditshigher'] = $data['creditshigher'];
$data['groupcreditslower'] = $data['creditslower'];
unset($data['type'], $data['system'], $data['creditshigher'], $data['creditslower'], $data['color'], $data['groupavatar'], $data['admingid']);
foreach($data as $key => $val) {
if(!isset($data[$key])) {
unset($data[$key]);
}
}
writetocache($data['groupid'], '', getcachevars($data), 'usergroup_');
}
}
if(!$cachename || $cachename == 'admingroups') {
$query = $db->query("SELECT * FROM {$tablepre}admingroups");
while($data = $db->fetch_array($query)) {
writetocache($data['admingid'], '', getcachevars($data), 'admingroup_');
}
}
if(!$cachename || $cachename == 'plugins') {
$query = $db->query("SELECT pluginid, available, adminid, name, identifier, datatables, directory, copyright, modules FROM {$tablepre}plugins");
while($plugin = $db->fetch_array($query)) {
$data = array_merge($plugin, array('modules' => array()), array('vars' => array()));
$plugin['modules'] = unserialize($plugin['modules']);
if(is_array($plugin['modules'])) {
foreach($plugin['modules'] as $module) {
$data['modules'][$module['name']] = $module;
}
}
$queryvars = $db->query("SELECT variable, value FROM {$tablepre}pluginvars WHERE pluginid='$plugin[pluginid]'");
while($var = $db->fetch_array($queryvars)) {
$data['vars'][$var['variable']] = $var['value'];
}
writetocache($plugin['identifier'], '', "\$_DPLUGIN['$plugin[identifier]'] = ".arrayeval($data), 'plugin_');
}
}
}
function writetocache($script, $cachenames, $cachedata = '', $prefix = 'cache_') {
if(is_array($cachenames) && !$cachedata) {
foreach($cachenames as $name) {
$cachedata .= getcachearray($name);
}
}
$dir = DISCUZ_ROOT.'./forumdata/cache/';
if(!is_dir($dir)) {
@mkdir($dir, 0777);
}
if(@$fp = fopen("$dir$prefix$script.php", 'w')) {
fwrite($fp, "<?php\n//Discuz! cache file, DO NOT modify me!\n".
"//Created on ".date("M j, Y, G:i")."\n\n$cachedata?>");
fclose($fp);
} else {
dexit('Can not write to cache files, please check directory ./forumdata/ and ./forumdata/cache/ .');
}
}
function getcachearray($cachename) {
global $db, $timestamp, $tablepre;
$cols = '*';
$conditions = '';
switch($cachename) {
case 'settings':
$table = 'settings';
$conditions = "WHERE variable NOT IN ('bbrules', 'bbrulestxt', 'maxonlines', 'welcomemsg', 'welcomemsgtxt')";
break;
case 'usergroups':
$table = 'usergroups';
$cols = 'groupid, type, grouptitle, creditshigher, creditslower, stars, color, groupavatar, readaccess, allowavatar, allowcusbbcode, allowuseblog';
$conditions = "ORDER BY creditslower";
break;
case 'ranks':
$table = 'ranks';
$cols = 'ranktitle, postshigher, stars, color';
$conditions = "ORDER BY postshigher DESC";
break;
case 'announcements':
$table = 'announcements';
$cols = 'id, subject, starttime, endtime';
$conditions = "ORDER BY displayorder, starttime DESC, id DESC";
break;
case 'announcements_forum':
$table = 'announcements a';
$cols = 'a.id, a.author, a.message, m.uid AS authorid, a.subject, a.starttime';
$conditions = "LEFT JOIN {$tablepre}members m ON m.username=a.author ORDER BY a.displayorder, a.starttime DESC, a.id DESC LIMIT 1";
break;
case 'globalstick':
$table = 'forums';
$cols = 'fid, type, fup';
$conditions = "WHERE status='1' AND type IN ('forum', 'sub') ORDER BY type";
break;
case 'forums':
$table = 'forums f';
$cols = 'f.fid, f.type, f.name, f.fup, ff.viewperm, a.uid';
$conditions = "LEFT JOIN {$tablepre}forumfields ff ON ff.fid=f.fid LEFT JOIN {$tablepre}access a ON a.fid=f.fid AND a.allowview='1' WHERE f.status='1' ORDER BY displayorder";
break;
case 'onlinelist':
$table = 'onlinelist';
$conditions = "ORDER BY displayorder";
break;
case 'forumlinks':
$table = 'forumlinks';
$conditions = "ORDER BY displayorder";
break;
case 'bbcodes':
$table = 'bbcodes';
$conditions = "WHERE available='1'";
break;
case 'smilies':
$table = 'smilies';
$cols = 'code, url';
$conditions = "WHERE type='smiley' ORDER BY LENGTH(code) DESC";
break;
case 'smilies_display':
$table = 'smilies';
$cols = 'code, url';
$conditions = "WHERE type='smiley' ORDER BY displayorder";
break;
case 'icons':
$table = 'smilies';
$cols = 'id, url';
$conditions = "WHERE type='icon' ORDER BY displayorder";
break;
case 'fields_required':
$table = 'profilefields';
$cols = 'fieldid, invisible, title, description, required, unchangeable, selective, choices';
$conditions = "WHERE available='1' AND required='1' ORDER BY displayorder";
break;
case 'fields_optional':
$table = 'profilefields';
$cols = 'fieldid, invisible, title, description, required, unchangeable, selective, choices';
$conditions = "WHERE available='1' AND required='0' ORDER BY displayorder";
break;
case 'fields_thread':
$table = 'profilefields';
$cols = 'fieldid, title, selective, choices';
$conditions = "WHERE available='1' AND invisible='0' AND showinthread='1' ORDER BY displayorder";
break;
case 'ipbanned':
$db->query("DELETE FROM {$tablepre}banned WHERE expiration<'$timestamp'");
$table = 'banned';
$cols = 'ip1, ip2, ip3, ip4, expiration';
break;
case 'censor':
$table = 'words';
$cols = 'find, replacement';
break;
case 'medals':
$table = 'medals';
$cols = 'medalid, name, image';
$conditions = "WHERE available='1'";
break;
}
$data = array();
$query = $db->query("SELECT $cols FROM {$tablepre}$table $conditions");
switch($cachename) {
case 'settings':
while($setting = $db->fetch_array($query)) {
if($setting['variable'] == 'extcredits') {
if(is_array($setting['value'] = unserialize($setting['value']))) {
foreach($setting['value'] as $key => $value) {
if($value['available']) {
unset($setting['value'][$key]['available']);
} else {
unset($setting['value'][$key]);
}
}
}
} elseif($setting['variable'] == 'creditspolicy') {
$setting['value'] = unserialize($setting['value']);
} elseif($setting['variable'] == 'creditsformula') {
$setting['value'] = preg_replace("/(digestposts|posts|pageviews|oltime|extcredits[1-8])/", "\$member['\\1']", $setting['value']);
} elseif($setting['variable'] == 'maxsmilies') {
$setting['value'] = $setting['value'] <= 0 ? -1 : $setting['value'];
}
$GLOBALS[$setting['variable']] = $data[$setting['variable']] = $setting['value'];
}
$data['avatarext'] = "gif\tjpg\tpng";
if($data['stylejump']) {
$data['stylejump'] = array();
$query = $db->query("SELECT styleid, name FROM {$tablepre}styles WHERE available='1'");
while($style = $db->fetch_array($query)) {
$data['stylejump'][$style['styleid']] = dhtmlspecialchars($style['name']);
}
}
$query = $db->query("SELECT COUNT(*) FROM {$tablepre}members");
$GLOBALS['totlamembers'] = $data['totalmembers'] = $db->result($query, 0);
$query = $db->query("SELECT username FROM {$tablepre}members ORDER BY uid DESC LIMIT 1");
$GLOBALS['lastmember'] = $data['lastmember'] = $db->result($query, 0);
$GLOBALS['version'] = $data['version'] = DISCUZ_KERNEL_VERSION;
$modreasonsarray = array();
foreach(explode("\n", trim($data['modreasons'])) as $reason) {
$reason = trim($reason);
$modreasonarray[] = $reason ? array(dhtmlspecialchars($reason), $reason) : array('', '--------');
}
$GLOBALS['modreasons'] = $data['modreasons'] = $modreasonarray;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -