Discuz!源代码分析

合集下载

Discuz!常用函数解析

Discuz!常用函数解析

Discuz!常用函数解析php, 函数, Discuz, param, Discuz二次开发<?php/*[Discuz!] (C)2001-2007 Comsenz Inc.This is NOT a freeware, use is subject to license terms$Id: global.func.php 13426 2008-04-15 03:37:02Z heyond $*/if(!defined('IN_DISCUZ')) {exit('Access Denied');}/*** 加密或者解密用户信息* @param $string - 加密或解密的串* @param $operation - 加密还是解密* @param 密钥* @return 返回字符串* $ckey_length 随机密钥长度取值 0-32;* 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。

* 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方* 当此值为 0 时,则不产生随机密钥*/function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {$ckey_length = 4;$key = md5($key ? $key : $GLOBALS['discuz_auth_key']);$keya = md5(substr($key, 0, 16));$keyb = md5(substr($key, 16, 16));$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';$cryptkey = $keya.md5($keya.$keyc);$key_length = strlen($cryptkey);$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() :0).substr(md5($string.$keyb), 0, 16).$string;$string_length = strlen($string);$result = '';$box = range(0, 255);$rndkey = array();for($i = 0; $i <= 255; $i++) {$rndkey[$i] = ord($cryptkey[$i % $key_length]);}for($j = $i = 0; $i < 256; $i++) {$j = ($j + $box[$i] + $rndkey[$i]) % 256;$tmp = $box[$i];$box[$i] = $box[$j];$box[$j] = $tmp;}for($a = $j = $i = 0; $i < $string_length; $i++) {$a = ($a + 1) % 256;$j = ($j + $box[$a]) % 256;$tmp = $box[$a];$box[$a] = $box[$j];$box[$j] = $tmp;$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));}if($operation == 'DECODE') {if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {return substr($result, 26);} else {return '';}} else {return $keyc.str_replace('=', '',base64_encode($result));}}/*** 清理cookie*/function clearcookies() {global $discuz_uid, $discuz_user, $discuz_pw, $discuz_secques, $adminid, $credits;dsetcookie('sid', '', -86400 * 365);dsetcookie('auth', '', -86400 * 365);dsetcookie('visitedfid', '', -86400 * 365);dsetcookie('onlinedetail', '', -86400 * 365, 0);dsetcookie('loginuser', '', -86400 * 365);dsetcookie('activationauth', '', -86400 * 365);$discuz_uid = $adminid = $credits = 0;$discuz_user = $discuz_pw = $discuz_secques = '';}/*** 检查积分下限* @param $creditsarray - 积分数组* @param $coef - 积分*/function checklowerlimit($creditsarray, $coef = 1) {if(is_array($creditsarray)) {global $extcredits, $id;foreach($creditsarray as $id => $addcredits) {$addcredits = $addcredits * $coef;if($addcredits < 0 &&($GLOBALS['extcredits'.$id] < $extcredits[$id]['lowerlimit'] || (($GLOBALS['extcredits'.$id] + $addcredits) <$extcredits[$id]['lowerlimit']))) {if($coef == 1) {showmessage('credits_policy_l owerlimit');} else {showmessage('credits_policy_n um_lowerlimit');}}}}}/*** 密码检测** @param string $md5* @param string $verified* @param string $salt* @return* 0= Failed* 1= MD5 with salt, 2= Dual MD5, 3= Normal Md5 4= MD5-16*/function checkmd5($md5, $verified, $salt = '') {if(md5($md5.$salt) == $verified) {$result = !empty($salt) ? 1 : 2;} elseif(empty($salt)) {$result = $md5 == $verified ? 3 : ((strlen($verified) == 16 && substr($md5, 8, 16) == $verified) ? 4 : 0);} else {$result = 0;}return $result;}/*** 检查模板源文件是否更新* 当编译文件不存时强制重新编译* 当 tplrefresh = 1 时检查文件* 当 tplrefresh > 1 时,则根据 tplrefresh 取余,无余时则检查更新**/function checktplrefresh($maintpl, $subtpl, $timecompare, $templateid, $tpldir) {global $tplrefresh;if(empty($timecompare) || $tplrefresh == 1 || ($tplrefresh > 1 && !($GLOBALS['timestamp'] % $tplrefresh))) {if(empty($timecompare) || @filemtime($subtpl) > $timecompare) {require_onceDISCUZ_ROOT.'./include/template.func.php';parse_template($maintpl, $templateid, $tpldir); return TRUE;}}return FALSE;}/*** 根据中文裁减字符串* @param $string - 字符串* @param $length - 长度* @param $doc - 缩略后缀* @return 返回带省略号被裁减好的字符串*/function cutstr($string, $length, $dot = ' ...') {global $charset;if(strlen($string) <= $length) {return $string;}$string = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string);$strcut = '';if(strtolower($charset) == 'utf-8') {$n = $tn = $noc = 0;while($n < strlen($string)) {$t = ord($string[$n]);if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)){$tn = 1; $n++; $noc++;} elseif(194 <= $t && $t <= 223) {$tn = 2; $n += 2; $noc += 2;} elseif(224 <= $t && $t < 239) {$tn = 3; $n += 3; $noc += 2;} elseif(240 <= $t && $t <= 247) {$tn = 4; $n += 4; $noc += 2;} elseif(248 <= $t && $t <= 251) {$tn = 5; $n += 5; $noc += 2;} elseif($t == 252 || $t == 253) {$tn = 6; $n += 6; $noc += 2;} else {$n++;}if($noc >= $length) {break;}}if($noc > $length) {$n -= $tn;}$strcut = substr($string, 0, $n);} else {for($i = 0; $i < $length; $i++) {$strcut .= ord($string[$i]) > 127 ?$string[$i].$string[++$i] : $string[$i];}}$strcut = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $strcut);return $strcut.$dot;}/*** 处理转义字符* @param $string -字符串* @param $force - 是否强制* @return 返回整理好的字符串*/function daddslashes($string, $force = 0) {!defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());if(!MAGIC_QUOTES_GPC || $force) {if(is_array($string)) {foreach($string as $key => $val) {$string[$key] = daddslashes($val, $force);}} else {$string = addslashes($string);}}return $string;}/*** 检测日期的有效性*/function datecheck($ymd, $sep='-') {if(!empty($ymd)) {list($year, $month, $day) = explode($sep, $ymd);return checkdate($month, $day, $year);} else {return FALSE;}}/*** 调试信息*/function debuginfo() {if($GLOBALS['debug']) {global $db, $discuz_starttime, $debuginfo;$mtime = explode(' ', microtime());$debuginfo = array('time' => number_format(($mtime[1] + $mtime[0] - $discuz_starttime), 6), 'queries' => $db->querynum);return TRUE;} else {return FALSE;}}/*** 退出系统*/function dexit($message = '') {echo $message;output();exit();}function dfopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 15, $block = TRUE) {$return = '';$matches = parse_url($url);$host = $matches['host'];$path = $matches['path'] ?$matches['path'].'?'.$matches['query'].'#'.$matches['fragment'] : '/'; $port = !empty($matches['port']) ? $matches['port'] : 80;if($post) {$out = "POST $path HTTP/1.0\r\n";$out .= "Accept: */*\r\n";//$out .= "Referer: $boardurl\r\n";$out .= "Accept-Language: zh-cn\r\n";$out .= "Content-Type:application/x-www-form-urlencoded\r\n";$out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"; $out .= "Host: $host\r\n";$out .= 'Content-Length: '.strlen($post)."\r\n";$out .= "Connection: Close\r\n";$out .= "Cache-Control: no-cache\r\n";$out .= "Cookie: $cookie\r\n\r\n";$out .= $post;} else {$out = "GET $path HTTP/1.0\r\n";$out .= "Accept: */*\r\n";//$out .= "Referer: $boardurl\r\n";$out .= "Accept-Language: zh-cn\r\n";$out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"; $out .= "Host: $host\r\n";$out .= "Connection: Close\r\n";$out .= "Cookie: $cookie\r\n\r\n";}$fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);if(!$fp) {return '';//note $errstr : $errno \r\n} else {stream_set_blocking($fp, $block);stream_set_timeout($fp, $timeout);@fwrite($fp, $out);$status = stream_get_meta_data($fp);if(!$status['timed_out']) {while (!feof($fp)) {if(($header = @fgets($fp)) && ($header== "\r\n" || $header == "\n")) {break;}}$stop = false;while(!feof($fp) && !$stop) {$data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit));$return .= $data;if($limit) {$limit -= strlen($data);$stop = $limit <= 0;}}}@fclose($fp);return $return;}}/*** HTML转义字符* @param $string - 字符串* @return 返回转义好的字符串*/function dhtmlspecialchars($string) {if(is_array($string)) {foreach($string as $key => $val) {$string[$key] = dhtmlspecialchars($val);}} else {$string =preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4})|[a-zA-Z][a-z0-9]{2,5});) /', '&\\1',str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string));}return $string;}function dheader($string, $replace = true, $http_response_code = 0) { $string = str_replace(array("\r", "\n"), array('', ''), $string); if(empty($http_response_code) || PHP_VERSION < '4.3' ) {@header($string, $replace);} else {@header($string, $replace, $http_response_code);}if(preg_match('/^\s*location:/is', $string)) {exit();}}/*** 上传文件的函数* @param $file - 要上传的文件* @return 返回带省略号被裁减好的字符串*/function disuploadedfile($file) {return function_exists('is_uploaded_file') &&(is_uploaded_file($file) || is_uploaded_file(str_replace('\\\\', '\\', $file)));}/*** 刷新重定向*/function dreferer($default = '') {global $referer, $indexname;$default = empty($default) ? $indexname : '';if(empty($referer) &&isset($GLOBALS['_SERVER']['HTTP_REFERER'])) {$referer =preg_replace("/([\?&])((sid\=[a-z0-9]{6})(&|$))/i", '\\1', $GLOBALS['_SERVER']['HTTP_REFERER']);$referer = substr($referer, -1) == '?' ? substr($referer, 0, -1) : $referer;} else {$referer = dhtmlspecialchars($referer);}if(!preg_match("/(\.php|[a-z]+(\-\d+)+\.html)/", $referer) || strpos($referer, 'logging.php')) {$referer = $default;}return $referer;}/*** 设置cookie* @param $var - 变量名* @param $value - 变量值* @param $life - 生命期* @param $prefix - 前缀*/function dsetcookie($var, $value, $life = 0, $prefix = 1) {global $cookiepre, $cookiedomain, $cookiepath, $timestamp, $_SERVER;setcookie(($prefix ? $cookiepre : '').$var, $value,$life ? $timestamp + $life : 0, $cookiepath,$cookiedomain, $_SERVER['SERVER_PORT'] == 443 ? 1 : 0); }function dunlink($filename, $havethumb = 0, $remote = 0) {global $authkey, $ftp, $attachdir;if($remote) {require_once DISCUZ_ROOT.'./include/ftp.func.php';if(!$ftp['connid']) {if(!($ftp['connid'] =dftp_connect($ftp['host'], $ftp['username'], authcode($ftp['password'], 'DECODE', md5($authkey)), $ftp['attachdir'], $ftp['port'],$ftp['ssl']))) {return;}}dftp_delete($ftp['connid'], $filename);$havethumb && dftp_delete($ftp['connid'],$filename.'.thumb.jpg');} else {@unlink($attachdir.'/'.$filename);$havethumb &&@unlink($attachdir.'/'.$filename.'.thumb.jpg');}}/*** 格式化email* @param $email - 邮箱地址* @param $tolink - 是否增加链接* @return 返回代码*/function emailconv($email, $tolink = 1) {$email = str_replace(array('@', '.'), array('@', '.'), $email); return $tolink ? '<a href="mailto: '.$email.'">'.$email.'</a>': $email;}/*** 系统错误日志* @param $type - 信息类型* @param $message - 信息* @param $halt - 是否退出*/function errorlog($type, $message, $halt = 1) {global $timestamp, $discuz_userss, $onlineip, $_SERVER;$user = empty($discuz_userss) ? '' : $discuz_userss.'<br />'; $user .= $onlineip.'|'.$_SERVER['REMOTE_ADDR'];writelog('errorlog',dhtmlspecialchars("$timestamp\t$type\t$user\t".str_replace(array("\r", "\n"), array(' ', ' '), trim($message))));if($halt) {exit();}}/*** 去掉文件扩展名* @param $finename - 文件名称* @return 文件名*/function fileext($filename) {return trim(substr(strrchr($filename, '.'), 1, 10));}/*** 产生form防伪码*/function formhash($specialadd = '') {global $discuz_user, $discuz_uid, $discuz_pw, $timestamp, $discuz_auth_key;$hashadd = defined('IN_ADMINCP') ? 'Only For Discuz! Admin Control Panel' : '';return substr(md5(substr($timestamp, 0,-7).$discuz_user.$discuz_uid.$discuz_pw.$discuz_auth_key.$hashadd.$sp ecialadd), 8, 8);}/*** 论坛权限* @param $permstr - 权限信息* @return 0 无权限 > 0 有权限*/function forumperm($permstr) {global $groupid, $extgroupids;$groupidarray = array($groupid);foreach(explode("\t", $extgroupids) as $extgroupid) {if($extgroupid = intval(trim($extgroupid))) {$groupidarray[] = $extgroupid;}}return preg_match("/(^|\t)(".implode('|', $groupidarray).")(\t|$)/", $permstr);}/**权限表达式* @param $formula - 权限表达式* @param $type - 0 论坛权限验证 1 勋章权限验证 2 返回勋章权限字串*/function formulaperm($formula, $type = 0) {global $_DSESSION, $extcredits, $formulamessage, $usermsg, $forum, $language;if((!$formula || $_DSESSION['adminid'] == 1 ||$forum['ismoderator']) && !$type) {return;}$formula = unserialize($formula);$formula = $formula[1];if(!$formula) {return;}@eval("\$formulaperm = ($formula) ? TRUE : FALSE;");if(!$formulaperm || $type == 2) {include_once language('misc');$search = array('$_DSESSION[\'digestposts\']','$_DSESSION[\'posts\']', '$_DSESSION[\'oltime\']','$_DSESSION[\'pageviews\']');$replace = array($language['formulaperm_digestposts'], $language['formulaperm_posts'], $language['formulaperm_oltime'], $language['formulaperm_pageviews']);for($i = 1; $i <= 8; $i++) {$search[] = '$_DSESSION[\'extcredits'.$i.'\']'; $replace[] = $extcredits[$i]['title'] ? $extcredits[$i]['title'] : $language['formulaperm_extcredits'].$i;}$i = 0;$usermsg = '';foreach($search as $s) {$usermsg .= strexists($formula, $s) ? $replace[$i].' = '.(@eval('return intval('.$s.');')).' ' : '';$i++;}$search = array_merge($search, array('and', 'or', '>=', '<='));$replace = array_merge($replace,array(' '.$language['formulaperm_and'].' ',' '.$language['formulaperm_or'].' ', '≥', '≤'));$formulamessage = str_replace($search, $replace, $formula);if($type == 1) {showmessage('medal_permforum_nopermission', NULL, 'NOPERM');} elseif($type == 2) {return $formulamessage;} else {showmessage('forum_permforum_nopermission', NULL, 'NOPERM');}}return TRUE;}/*** 获取用户所在组* @param $uid - 用户组* @param $group - 用户组* @param $member - 用户组*/function getgroupid($uid, $group, &$member) {global $creditsformula, $db, $tablepre;if(!empty($creditsformula)) {$updatearray = array();eval("\$credits = round($creditsformula);");if($credits != $member['credits']) {$updatearray[] = "credits='$credits'";$member['credits'] = $credits;}if($group['type'] == 'member'&& !($member['credits'] >= $group['creditshigher'] && $member['credits'] < $group['creditslower'])) {$query = $db->query("SELECT groupid FROM {$tablepre}usergroups WHERE type='member' AND$member[credits]>=creditshigher AND $member[credits]<creditslower LIMIT 1");if($db->num_rows($query)) {$member['groupid'] =$db->result($query, 0);$updatearray[] ="groupid='$member[groupid]'";}}if($updatearray) {$db->query("UPDATE {$tablepre}members SET".implode(', ', $updatearray)." WHERE uid='$uid'");}}return $member['groupid'];}function getrobot() {if(!defined('IS_ROBOT')) {$kw_spiders ='Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';$kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla'; if(preg_match("/($kw_browsers)/",$_SERVER['HTTP_USER_AGENT'])) {define('IS_ROBOT', FALSE);} elseif(preg_match("/($kw_spiders)/",$_SERVER['HTTP_USER_AGENT'])) {define('IS_ROBOT', TRUE);} else {define('IS_ROBOT', FALSE);}}return IS_ROBOT;}/*** 根据用户的 uid 得到 avatar/home 目录** @param int $uid* @return string*/function get_home($uid) {$uid = sprintf("%05d", $uid);$dir1 = substr($uid, 0, -4);$dir2 = substr($uid, -4, 2);$dir3 = substr($uid, -2, 2);return $dir1.'/'.$dir2.'/'.$dir3;}/*** vip用户购买组权限是否到期* @param $terms 期限来源于 memberfields 表的 groupterms 字段* @return 返回过期信息*/function groupexpiry($terms) {$terms = is_array($terms) ? $terms : unserialize($terms);$groupexpiry = isset($terms['main']['time']) ?intval($terms['main']['time']) : 0;if(is_array($terms['ext'])) {foreach($terms['ext'] as $expiry) {if((!$groupexpiry && $expiry) || $expiry < $groupexpiry) {$groupexpiry = $expiry;}}}return $groupexpiry;}/*** ip允许访问* @param $ip 要检查的ip地址* @param - $accesslist 允许访问的ip地址* @param 返回结果*/function ipaccess($ip, $accesslist) {return preg_match("/^(".str_replace(array("\r\n", ' '),array('|', ''), preg_quote($accesslist, '/')).")/", $ip);}/*** 将数组元素格式化成类似 '1','2','3' 的字符串* @return STRING 字串否则为 NULL*/function implodeids($array) {if(!empty($array)) {return "'".implode("','", is_array($array) ? $array : array($array))."'";} else {return '';}}/*** ip限制访问* @param $ip 要检查的ip地址* @param - $accesslist 允许访问的ip地址* @param 返回结果*/function ipbanned($onlineip) {global $ipaccess, $timestamp, $cachelost;if($ipaccess && !ipaccess($onlineip, $ipaccess)) {return TRUE;}$cachelost .= (@includeDISCUZ_ROOT.'./forumdata/cache/cache_ipbanned.php') ? '' : ' ipbanned'; if(empty($_DCACHE['ipbanned'])) {return FALSE;} else {if($_DCACHE['ipbanned']['expiration'] < $timestamp) { @unlink(DISCUZ_ROOT.'./forumdata/cache/cache_ ipbanned.php');}returnpreg_match("/^(".$_DCACHE['ipbanned']['regexp'].")$/", $onlineip);}}/*** 检查邮箱是否有效* @param $email 要检查的邮箱* @param 返回结果*/function isemail($email) {return strlen($email) > 6 &&preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $email);}/*** 加载语言* @param $file - 语言文件* @param $templateid - 模板号码* @param $tpldir - 模板路径* @return 加载的语言*/function language($file, $templateid = 0, $tpldir = '') {$tpldir = $tpldir ? $tpldir : TPLDIR;$templateid = $templateid ? $templateid : TEMPLATEID;$languagepack = DISCUZ_ROOT.'./'.$tpldir.'/'.$file.'.lang.php'; if(file_exists($languagepack)) {return $languagepack;} elseif($templateid != 1 && $tpldir != './templates/default') {return language($file, 1, './templates/default');} else {return FALSE;}}/*** 分页* @param $num - 总数* @param $perpage - 每页数* @param $curpage - 当前页* @param $mpurl - 跳转的路径* @param $maxpages - 允许显示的最大页数* @param $page - 最多显示多少页码* @param $autogoto - 最后一页,自动跳转* @param $simple - 是否简洁模式(简洁模式不显示上一页、下一页和页码跳转)* @return 返回分页代码*/function multi($num, $perpage, $curpage, $mpurl, $maxpages = 0, $page = 10, $autogoto = TRUE, $simple = FALSE) {global $maxpage;//debug 加入 ajaxtarget 属性$ajaxtarget = !empty($_GET['ajaxtarget']) ? "ajaxtarget=\"".dhtmlspecialchars($_GET['ajaxtarget'])."\" " : '';$multipage = '';$mpurl .= strpos($mpurl, '?') ? '&' : '?';$realpages = 1;if($num > $perpage) {$offset = 2;$realpages = @ceil($num / $perpage);$pages = $maxpages && $maxpages < $realpages ? $maxpages : $realpages;if($page > $pages) {$from = 1;$to = $pages;} else {$from = $curpage - $offset;$to = $from + $page - 1;if($from < 1) {$to = $curpage + 1 - $from;$from = 1;if($to - $from < $page) {$to = $page;}} elseif($to > $pages) {$from = $pages - $page + 1;$to = $pages;}}$multipage = ($curpage - $offset > 1 && $pages > $page ? '<a href="'.$mpurl.'page=1" class="first"'.$ajaxtarget.'>1 ...</a>' : '').($curpage > 1 && !$simple ? '<ahref="'.$mpurl.'page='.($curpage - 1).'"class="prev"'.$ajaxtarget.'>‹‹</a>' : '');for($i = $from; $i <= $to; $i++) {$multipage .= $i == $curpage ?'<strong>'.$i.'</strong>' :'<ahref="'.$mpurl.'page='.$i.($ajaxtarget && $i == $pages && $autogoto ? '#' : '').'"'.$ajaxtarget.'>'.$i.'</a>';}$multipage .= ($curpage < $pages && !$simple ? '<a href="'.$mpurl.'page='.($curpage + 1).'"class="next"'.$ajaxtarget.'>››</a>' : '').($to < $pages ? '<ahref="'.$mpurl.'page='.$pages.'" class="last"'.$ajaxtarget.'>...'.$realpages.'</a>' : '').(!$simple && $pages > $page && !$ajaxtarget ? '<kbd><input type="text" name="custompage" size="3" /></kbd>' : ''); $multipage = $multipage ? '<divclass="pages">'.(!$simple ? '<em> '.$num.' </em>' :'').$multipage.'</div>' : '';}$maxpage = $realpages;return $multipage;}/*** 系统输出* @return 返回内容*/function output() {if(defined('DISCUZ_OUTPUTED')) {return;}define('DISCUZ_OUTPUTED', 1);global $sid, $transsidstatus, $rewritestatus, $ftp, $advlist, $insenz, $queryfloat, $thread, $inajax;if(($advlist || !empty($insenz['hardadstatus']) || $queryfloat) && !defined('IN_ADMINCP') && !(CURSCRIPT == 'viewthread' &&$thread['digest'] == '-1') && !$inajax) {include template('adv');}if(($transsidstatus = empty($GLOBALS['_DCOOKIE']['sid']) && $transsidstatus) || $rewritestatus) {if($transsidstatus) {$searcharray = array("/\<a(\s*[^\>]+\s*)href\=([\"|\']?)([^\"\'\s]+)/ies","/(\<form.+?\>)/is");$replacearray = array("transsid('\\3','<a\\1href=\\2')","\\1\n<input type=\"hidden\"name=\"sid\" value=\"$sid\" />");} else {$searcharray = $replacearray = array();if($rewritestatus & 1) {$searcharray[] = "/\<ahref\=\"forumdisplay\.php\?fid\=(\d+)(&page\=(\d+))?\"([^\>]*)\>/e";$replacearray[] = "rewrite_forum('\\1', '\\3', '\\4')";}if($rewritestatus & 2) {$searcharray[] = "/\<ahref\=\"viewthread\.php\?tid\=(\d+)(&extra\=page\%3D(\d+))?(&page\=(\d+))?\"([^\>]*)\>/e";$replacearray[] ="rewrite_thread('\\1', '\\5', '\\3', '\\6')";}if($rewritestatus & 4) {$searcharray[] = "/\<ahref\=\"space\.php\?(uid\=(\d+)|username\=([^&]+?))\"([^\>]*)\>/e";$replacearray[] = "rewrite_space('\\2', '\\3', '\\4')";}if($rewritestatus & 8) {$searcharray[] = "/\<ahref\=\"tag\.php\?name\=([^&]+?)\"([^\>]*)\>/e";$replacearray[] = "rewrite_tag('\\1', '\\2')";}}$content = preg_replace($searcharray, $replacearray, ob_get_contents());ob_end_clean();$GLOBALS['gzipcompress'] ? ob_start('ob_gzhandler') : ob_start();echo $content;}if($ftp['connid']) {@ftp_close($ftp['connid']);}$ftp = array();//debug Module:HTML_CACHE 如果定义了缓存常量,则此处将缓冲区的内容写入文件。

论坛源代码

论坛源代码

论坛源代码摘要:本文介绍了论坛源代码的基本结构和关键组成部分,以及如何设计一个功能完善的论坛系统。

论坛源代码是构建一个在线社区的核心元素,它涵盖了用户注册、登录、发帖、回复、管理等一系列功能。

通过了解论坛源代码的结构和设计原则,开发者可以更好地理解和修改现有的论坛系统,或者设计自己的论坛系统。

1. 引言随着互联网的发展,论坛成为了人们交流和分享观点的重要平台之一。

而论坛源代码则是构建一个在线社区的关键组成部分。

本文将介绍论坛源代码的基本结构和功能实现,旨在帮助开发者理解和设计一个功能完善的论坛系统。

2. 论坛源代码的基本结构论坛源代码通常由前端和后端两部分组成。

前端负责页面的展示和用户操作的交互,后端则负责处理用户请求、数据存储和业务逻辑的实现。

2.1 前端结构前端通常由HTML、CSS和JavaScript组成。

HTML负责定义页面的结构,CSS负责渲染页面的样式,JavaScript则负责处理用户操作和与后端进行数据交互。

2.2 后端结构后端通常使用一种编程语言实现,如Java、Python、PHP等。

它由各种模块组成,包括路由模块、数据库模块、用户权限模块、帖子管理模块等。

3. 论坛源代码的关键功能论坛源代码涵盖了许多重要功能,以下是其中几个关键功能的介绍。

3.1 用户注册和登录用户注册功能允许用户创建新账号,包括用户名、密码和其他个人信息。

用户登录功能则用于验证用户身份,并提供基于用户的个性化服务。

3.2 发帖和回复发帖功能允许用户创建新主题,并发布到论坛中。

回复功能允许用户对其他用户的主题进行评论和回复。

3.3 消息和通知论坛源代码通常会包括消息和通知功能,用于向用户发送私信或通知他们有新的回复、提醒等重要信息。

3.4 用户权限管理用户权限管理功能用于管理用户的权限,如管理员、版主等身份的设置和权限控制,保证论坛的正常运行和秩序。

3.5 帖子和用户信息管理帖子和用户信息管理功能用于对用户发帖和个人信息进行管理,包括修改、删除和查看等操作,以维护论坛的内容和用户数据的完整性。

dedecms调用dz论坛代码(织梦调用dz帖子)

dedecms调用dz论坛代码(织梦调用dz帖子)

3、论坛调精华主题调用代码如下:
{dede:loop table="cdb_threads" if="displayorder!=-1" sort="tid" row="10"}
<a href="/bbs/viewthread.php?tid=[field:tid /]">
[[field:lastpost function="date('m-d','@me')" /]]
</li>
{/dede:loop}
调用回复次数最多的帖子。
{dede:loop table="cdb_threads" if="fid=4 and displayorder!=-1" sort="replies" row="8"}
document.write('<param name="movie" value="{dede:global.cfg_templeturl/}/images/bcastr3.swf"><param name="quality"
value="high">');
document.write('<param name="menu" value="false"><param name=wmode value="opaque">');
[field:message function="cn_substr('@me',46)" /]...<a href="/bbs/thread-[field:tid/]-1-1.html" target="_blank">[查看全文]</a>

Discuz!NT代码阅读笔记(5)--从全局看看:各个模块功能摘要(1)

Discuz!NT代码阅读笔记(5)--从全局看看:各个模块功能摘要(1)

Discuz!NT代码阅读笔记(5)--从全局看看:各个模块功能摘要Discuz中有24个Project,每个项目各自作为项目架构中的不同的功能。

下面我们来各自的分析一下这些项目。

图(1)DNT中包含的项目(1)Discuz.Web该项目是DNT最终生成网站的项目。

图(2)Discuz.Web中的内容Aspx文件夹存放了DNT的网站模板,前面提到在首页显示前的HttpModule处理函数中,有个地址重写的函数:private void ReUrl_BeginRequest(object sender, EventArgs e){。

//对首页的请求重定向到forumindex.aspxif (requestPath.EndsWith("/index.aspx")){if (config.Indexpage == 0){if (config.BrowseCreateTemplate == 1){CreateTemplate(forumPath, Templates.GetTemplateItem(int.Parse(strTemp lateid)).Directory, "forumindex.aspx", int.Parse(strTemplateid));}context.RewritePath(forumPath + "aspx/" + strTemplateid+ "/forumindex.aspx");}else{if (config.BrowseCreateTemplate == 1){CreateTemplate(forumPath, Templates.GetTemplateItem(int.Parse(strTemp lateid)).Directory, "website.aspx", int.Parse(strTemplateid));}context.RewritePath(forumPath + "aspx/" + strTemplateid+ "/website.aspx");}return;}。

Discuz!常用函数解析-电脑资料

Discuz!常用函数解析-电脑资料

Discuz!常用函数解析-电脑资料/*** 产生随机码* @param $length - 要多长* @param $numberic - 数字还是字符串* @return 返回字符串*/function random($length, $numeric = 0) {PHP_VERSION < '4.2.0' && mt_srand((double)microtime() * 1000000);if($numeric) {$hash = sprintf('%0'.$length.'d', mt_rand(0, pow(10, $length) - 1));} else {$hash = '';$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklm nopqrstuvwxyz';$max = strlen($chars) - 1;for($i = 0; $i < $length; $i++) {$hash .= $chars[mt_rand(0, $max)];}}return $hash;}/*** 删除非空目录* @param $path 目录*/function removedir($dirname, $keepdir = FALSE) {$dirname = wipespecial($dirname);if(!is_dir($dirname)) {return FALSE;}$handle = opendir($dirname);while(($file = readdir($handle)) !== FALSE) {if($file != '.' && $file != '..') {$dir = $dirname . DIRECTORY_SEPARATOR . $file;is_dir($dir) ? removedir($dir) : unlink($dir);}}closedir($handle);return !$keepdir ? (@rmdir($dirname) ? TRUE : FALSE) : TRUE;}function request($cachekey, $fid = 0, 0 = 0, $return = 0) {global $timestamp, $_DCACHE;$datalist = '';if($fid && in_array(CURSCRIPT, array('forumdisplay', 'viewthread'))) {$specialfid = $GLOBALS['forum']['fid'];$cachekey= !isset($GLOBALS['infosidestatus']['f'.$specialfid][0]) ? $GLOBALS['infosidestatus'][0] : $GLOBALS['infosidestatus']['f'.$specialfid][0];$key = $cachekey;$cachekey .= '_fid'.$specialfid;} else {$specialfid = 0;$key = $cachekey;}$cachefile = DISCUZ_ROOT.'./forumdata/cache/request_'.$cachekey.'.php';if((@!include($cachefile)) || $expiration < $timestamp) {require_onceDISCUZ_ROOT.'./forumdata/cache/cache_request.php';require_once DISCUZ_ROOT.'./include/request.func.php';parse_str($_DCACHE['request'][$key]['url'], $requestdata);$datalist = parse_request($requestdata, $cachefile, 0, $specialfid, $key);}if(!$return) {echo $datalist;} else {return $datalist;}}/*** 发送邮件* @param $email_to - 接受者* @param $email_subject - 标题* @param $email_messge - 内容* @param $email_from - 发送者*/function sendmail($email_to, $email_subject, $email_message, $email_from = '') {extract($GLOBALS, EXTR_SKIP);require DISCUZ_ROOT.'./include/sendmail.inc.php';}/*** 发送短消息* @param $toid - 接收方id* @param $subject - 标题* @param $message - 内容* @param $fromid - 发送方id* @param $from - 发送方名字*/function sendpm($toid, $subject, $message, $fromid = '') { extract($GLOBALS, EXTR_SKIP);include language('pms');require_once DISCUZ_ROOT.'./uc_client/client.php';if(isset($language[$subject])) {eval("\$subject = addslashes(\"".$language[$subject]."\");");}if(isset($language[$message])) {eval("\$message = addslashes(\"".$language[$message]."\");");}if($fromid === '') {$fromid = $discuz_uid;}uc_pm_send($fromid, $toid, $subject, $message);}/*** 显示标准提示信息* @param $toid - 信息* @param $subject - 跳转到的url* @param $message - 扩展*/function showmessage($message, $url_forward = '', $extra = '') {extract($GLOBALS, EXTR_SKIP);global $extrahead, $discuz_action, $debuginfo, $seccode, $fid, $tid, $charset, $show_message, $inajax, $_DCACHE, $advlist;define('CACHE_FORBIDDEN', TRUE);$show_message = $message;$msgforward = unserialize($_DCACHE['settings']['msgforward']);$msgforward['refreshtime'] = intval($msgforward['refreshtime']) * 1000;$url_forward = empty($url_forward) ? '' : (empty($_DCOOKIE['sid']) && $transsidstatus ? transsid($url_forward) : $url_forward);if($url_forward && empty($inajax) && $msgforward['quick'] && $msgforward['messages'] && @in_array($message, $msgforward['messages'])) {updatesession();dheader("location: ".str_replace('&', '&', $url_forward));}if(in_array($extra, array('HALTED', 'NOPERM'))) {$fid = $tid = 0;$discuz_action = 254;} else {$discuz_action = 255;}include language('messages');if(isset($language[$message])) {$pre = $inajax ? 'ajax_' : '';eval("\$show_message =\"".(isset($language[$pre.$message]) ? $language[$pre.$message] : $language[$message])."\";");unset($pre);。

论坛代码_精品文档

论坛代码_精品文档

论坛代码1. 简介论坛是一个在线交流平台,提供用户发布帖子、评论、回复等功能。

在论坛代码中,我们将介绍论坛的整体架构以及常用的功能模块。

2. 架构论坛代码的架构采用了经典的三层架构:表现层、业务逻辑层和数据访问层。

•表现层(Presentation Layer):负责接收用户的请求,处理用户输入,返回相应的页面。

•业务逻辑层(Business Logic Layer):处理具体的业务逻辑,包括发布帖子、评论、回复等功能。

•数据访问层(Data Access Layer):与数据库进行交互,包括用户信息、帖子、评论等的存储和查询。

3. 功能模块3.1 用户管理用户管理是论坛模块的基础功能之一。

用户可以注册新账号、登录、修改个人信息等。

•注册:用户输入用户名、密码等信息注册新账号。

•登录:用户输入用户名、密码验证身份,并获取令牌。

•修改个人信息:用户可以修改个人信息,包括用户名、密码、个人简介等。

3.2 帖子管理帖子管理是论坛的核心功能之一。

用户可以发表新帖、编辑帖子内容、查看帖子列表和详情等。

•发表新帖:用户输入标题、内容等信息发表新帖。

•编辑帖子内容:用户可以编辑已发布的帖子内容。

•查看帖子列表:用户可以查看论坛上的帖子列表,按照时间或热度进行排序。

•查看帖子详情:用户可以查看帖子的详细内容和评论。

3.3 评论管理评论管理是用户对帖子进行互动的功能。

用户可以发表评论、回复评论等。

•发表评论:用户可以对帖子发表评论。

•回复评论:用户可以回复其他用户的评论。

4. 技术栈在论坛代码的实现中,我们使用了以下技术栈:•后端框架:采用基于Python的Django框架,提供了强大的后端开发能力。

•数据库:使用关系型数据库MySQL存储用户信息、帖子、评论等数据。

•前端框架:使用HTML、CSS和JavaScript实现用户界面的设计和交互,以及AJAX技术实现异步加载和提交数据。

•接口设计:通过RESTful API提供给前端与后端之间的数据交互接口。

Discuz!X2 核心源码分析

Discuz!X2 核心源码分析

Discuz! X2 核心类源码分析不是原创,只是进行转载MARK:/thread-212115-1-1.html<?php/*** [Discuz!] (C)2001-2099 Comsenz Inc.* This is NOT a freeware, use is subject to license terms** $Id: class_core.php 21271 2011-03-22 02:44:58Z congyushuai $ */define('IN_DISCUZ', true);error_reporting(0);class discuz_core {var $db = null;var $mem = null;var $session = null;var $config = array();var $var = array();var $cachelist = array();var $init_setting = true;var $init_user = true;var $init_session = true;var $init_cron = true;var $init_misc = true;var $init_memory = true;var $init_mobile = true;var $initated = false; //初始化工作未完成标志var $superglobal = array('GLOBALS' => 1,'_GET' => 1,'_POST' => 1,'_REQUEST' => 1,'_COOKIE' => 1,'_SERVER' => 1,'_ENV' => 1,'_FILES' => 1,);function &instance() {static $object;if(empty($object)) {$object = new discuz_core();}return $object;}function discuz_core() {$this->_init_env(); //初始化环境变量$this->_init_config(); //初始化配置变量$this->_init_input(); //初始化输入$this->_init_output(); //初始化输出}function init() {if(!$this->initated) {$this->_init_db(); //初始化数据库$this->_init_memory(); //初始化memcache$this->_init_user(); //用户信息初始化$this->_init_session(); //session操作初始化$this->_init_setting(); //系统设置初始化$this->_init_mobile(); //手机功能初始化$this->_init_cron(); //计划任务初始化$this->_init_misc(); //其他功能初始化}$this->initated = true; //设置完成标志}function _init_env() { //环境变量初始化方法error_reporting(E_ERROR); //定义错误报告等级if(phpversion() < '5.3.0') {set_magic_quotes_runtime(0); //设置set_magic_quotes_runtime}define('DISCUZ_ROOT', substr(dirname(__FILE__), 0, -12)); //定义根目录常量define('MAGIC_QUOTES_GPC', function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()); //定义MAGIC_QUOTES_GPCdefine('ICONV_ENABLE', function_exists('iconv')); //定义转码函数常量,如果iconv函数支持,则为TRUEdefine('MB_ENABLE', function_exists('mb_convert_encoding')); //转码函数是否支持define('EXT_OBGZIP', function_exists('ob_gzhandler')); //缓存输出句柄函数define('TIMESTAMP', time()); //定义当前时间戳常量$this->timezone_set();if(!defined('DISCUZ_CORE_FUNCTION') && !@include(DISCUZ_ROOT.'./source/function/function_core.php')) {exit('function_core.php is missing'); //如果系统核心函数库文件未include,则include,如果核心函数库文件缺失,则退出,因为function_core.php是系统本身的函数库,必须加载}if(function_exists('ini_get')) {$memorylimit = @ini_get('memory_limit');if($memorylimit && return_bytes($memorylimit) < 33554432 && function_exists('ini_set')) {ini_set('memory_limit', '128m');}}//以上6行代码的作用是设置内存使用限制,如果小于32M,则增加为128M,因为memory_limit小于32M,可能会不够用,毕竟X系统比较大,可能内存会使用的多点,如果不支持ini_set函数,就得去php.ini中修改了。

KaiBbsDiscuz美化模板系列教程Header代码分析

KaiBbsDiscuz美化模板系列教程Header代码分析

【KaiBbs】Discuz!美化模板系列教程--Header代码分析上节我们讲了模板的文件分析下面我们来看看header的代码分析基本结构:12============================================3| | | | | | | | |-模板开始-| | | | | | | | |4--------------------------------------------5| <html><!---网页信息---!>6| <head>7| <title>网页标题</title>8| SEO信息9H Js.Css调用等信息10 e </head>11 a12 d <body>13 e <div class="wrap">14r <div id="header">头像LOGO和广告信息</div>15 .16h <div id="menu">//*菜单图层17t <span class="avataonline">.....</span>18m <!--{if $_DCACHE['settings']['frameon'] > 0}-->.......<!--{/if}-->19| <ul>20| 1.2.3.4.5.........21| </ul>22| </div>23--------------------------------------24| Discuz.Htm25--------------------------------------26| Footer.Htm27|28| </div>29| </body>30| </html>31--------------------------------------------32| | | | | | | | |-模板结束-| | | | | | | | |33============================================复制代码===============Header部分开始===============3435<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd">36<html xmlns="/1999/xhtml">复制代码==============<head>开始代码======================3738<head>39<meta http-equiv="Content-Type" content="text/html; charset=$charset" />复制代码404142<title> $navtitle $bbname $seotitle - Powered by Discuz! </title>4344说明图片:45说明文字:红色文字为网站的标题部分1.$bbname为网站标题名字!在后台--全局--站点信息--论坛名称填写46 2.$seotitle为网站标题后面跟着的字!在后台--全局--优化设置--标题联附加字设置[上图没有填写]47 3.- Powered by Discuz!这断文字可以自行修改也可删除!48标题栏自己可以随便改动!想怎么改都行!如:我们的网站名字$navtitle $bbname $seotitle -欢迎光临哦!49另附关于网站标题的SEO:复制代码-------------------SEO信息---------------------5051$seohead52<meta name="keywords" content="{$metakeywords}$seokeywords" />53<meta name="description" content="$metadescription $bbname $seodescription - Discuz!Board" />54<meta name="generator" content="Discuz! $version" />55<meta name="author" content="Discuz! Team and Comsenz UI Team" />56<meta name="copyright" content="2001-2008 Comsenz Inc." />57<meta name="MSSmartTagsPreventParsing" content="True" />58<meta http-equiv="MSThemeCompatible" content="Yes" />59<link rel="archives" title="$bbname" href="{$boardurl}archiver/" />60$rsshead61$extrahead62-----------------------------------------------63<!--{if CURSCRIPT == 'viewthread'}-->64<link rel="stylesheet" type="text/css"href="forumdata/cache/style_{STYLEID}_viewthread.css" />65<!--{if $thread['special']}-->66<link rel="stylesheet" type="text/css"href="forumdata/cache/style_{STYLEID}_special.css" />67<!--{/if}-->68<!--{elseif CURSCRIPT == 'post'}-->69<link rel="stylesheet" type="text/css" href="forumdata/cache/style_{STYLEID}_editor.css" />70<!--{/if}-->71<link rel="stylesheet" type="text/css" href="forumdata/cache/style_{STYLEID}_common.css" /> 72<script type="text/javascript">73var discuz_uid = $discuz_uid;var IMGDIR = '{IMGDIR}';var attackevasive = '$attackevasive';var gid = 0;var STYLEID = '{STYLEID}';74<!--{if in_array(CURSCRIPT, array('viewthread', 'forumdisplay'))}-->gid = parseInt('$thisgid');<!--{elseif CURSCRIPT == 'index'}-->gid = parseInt('$gid');<!--{/if}-->var fid = parseInt('$fid');var tid = parseInt('$tid');75</script>76<script type="text/javascript" src="include/javascript/common.js"></script>77</head>78==================</head>结束代码=====================7980<body onkeydown="if(event.keyCode==27) return false;">8182<div id="append_parent"></div><div id="ajaxwaitid"></div>83<div class="wrap">84------------------------------------------------------------85<div id="header">86<h2><a href="$indexname" title="$bbname">{BOARDLOGO}</a></h2>87<div id="ad_headerbanner"><!--{if $admode && empty($insenz['hardadstatus'])&& !empty($advlist['headerbanner'])}-->$advlist[headerbanner]<!--{/if}--></div>88</div>89注:此处是显示论坛LOGO和顶部右侧广告部分90------------------------------------------------------------91<div id="menu">92菜单开始93------------------------------------------------------------94<span class="avataonline">95<!--{if $discuz_uid}-->96<cite><a class="dropmenu" id="viewpro" onmouseover="showMenu(this.id)">$discuz_userss</a></cite>97<a href="$link_logout">{lang logout}</a>98<!--{elseif !empty($_DCOOKIE['loginuser'])}-->99<cite><a id="loginuser" class="dropmenu">$_DCOOKIE['loginuser']</a></cite>100<a href="$link_login">{lang activation}</a>101<a href="$link_logout">{lang logout}</a>102<!--{else}-->103<a href="$link_register">$reglinkname</a>104<a href="$link_login">{lang login}</a>105<!--{/if}-->106</span>107注:此处的意思就是若灯入了则显示会员名字和退出按钮。

让论坛博客更漂亮——[discuz]代码一览

让论坛博客更漂亮——[discuz]代码一览

这个要看论坛的管理员在个性签名是否开放url和img的UBB权限.如果开放的可以使用这个代码:[url=http://][img]你的图片地址[/img][/url]一、普通贴图代码:[img]/bbs/images/default/logo.gif[/img]解释:把图片地址放在[img] [/img]中间注意:一定要在后面一个[ ]内img前加/,够成完整的代码二、贴图并显示图片大小代码:[img=83,31]/images/power.gif[/img]解释:把图片地址放在[img=83,31] [/img]中间,这里的83,31分别是图片的宽和高,可以随意调整。

注意:一定要在后面一个[ ]内img前加/,够成完整的代码*****贴图放在签名里时,高度不能大于400,就是后面一个数字不能大与400****三、贴FLASH代码:[swf]/discuz/images/banner.swf[/swf]解释:把FLASH地址放在[swf] [/swf]中间注意:FLASH地址的后面必须是以.swf结尾四、贴影片代码:[wmv]mms:///example.wmv[/wmv][rm]rtsp:///example.rm[/rm]解释:把影片的地址放在[wmv] [/wmv](或[rm] [/rm])中间注意:这里要注意的是电影的格式,在这里我们介绍的是以wma或rm格式的电影不要乱用。

五、字体移动代码:[fly]需要移动的文字[/fly]解释:把要移动的字放在[fly] [/fly]中间注意:一定要在后面一个[ ]内fly前加/,够成完整的代码六、引用代码:[quote]日光海岸[/quote]解释:把要引用的东西放在[quote] [/quote]注意:一定要在后面一个[ ] quote前加/,够成完整的代码七、网址连接代码:[url][/url]解释:把要链接的网址放入[url] [/url]中间注意:实际上在日光海岸的论坛上直接在贴子中贴出网址,论坛会自动识别出来八、EMAIL连接代码:[email]webmaster@[/email]解释:把邮件地址放入[email] [/email]中间注意:实际上在日光海岸的论坛上直接在贴子中贴出EMAIL论坛会自动识别出来九、让字有颜色代码:[color=red]红颜色[/color]解释:把要变颜色的字放入[color=red] [/color]注意:这里的[color=red] 中的red是代表红色,其他颜色可以换成其他的英语单词,如:blue等等十、让字变换大小代码:[size=3]文字大小为3[/size]解释:把要变换大小的字放入[size=3] [/size]中注意:这里的[size=3] 中的3 是字的大小,可以随意改变十一、贴MP3代码:[wmv]MP3地址[/wmv]解释:把MP3地址放入[wmv] [/wmv]中间注意:此代码与贴电影一样~不过有些论坛不支持的话那也没办法。

discuz源代码详解(3)

discuz源代码详解(3)

discuz源代码详解(3)2009-03-07 13:24以下内容为程序代码:/*** 用来得到上一个页面的地址,也就是来路。

* @para string $default 这个参数是直接设置一个refer,不用判断得到** @return string*/function dreferer($default = '') {global $referer, $indexname;$default = empty($default) ? $indexname : '';if(empty($referer) && isset($GLOBALS['_SERVER']['HTTP_REFERER'])) {$referer = preg_replace("/([\?&])((sid\=[a-z0-9]{6})(&|$))/i", '\\1', $GLOBALS['_SERVER']['HTTP_REFERER']);$referer = substr($referer, -1) == '?' ? substr($referer, 0, -1) : $referer;} else {$referer = dhtmlspecialchars($referer);}if(!preg_match("/(\.php|[a-z]+(\-\d+)+\.html)/", $referer) || strpos($referer, 'logging.php')) {$referer = $default;}return $referer;}以下内容为程序代码:/*** 设置cookie用的,我觉得这个和clearcookies放到一起比较好,不过好像这个是按字母排的…* @para string $var cookie名* @para string $value cookie值* @para int $life 生存时间* @para int $prefix cookie前缀**/function dsetcookie($var, $value, $life = 0, $prefix = 1) {global $cookiepre, $cookiedomain, $cookiepath, $timestamp, $_SERVER;//echo $prefix."--".$var."--".$value."--".$life."--".$cookiepath;setcookie(($prefix ? $cookiepre : '').$var, $value,$life ? $timestamp + $life : 0, $cookiepath,$cookiedomain, $_SERVER['SERVER_PORT'] == 443 ? 1 : 0);}以下内容为程序代码:/*** 删除论坛的附件用的* @para string $filename 附件名* @para int $havethumb 是否有缩略图* @para int $remote 是否为远程附件**/function dunlink($filename, $havethumb = 0, $remote = 0) {global $authkey, $ftp, $attachdir;if($remote) {require_once DISCUZ_ROOT.'./include/ftp.func.php';if(!$ftp['connid']) {if(!($ftp['connid'] = dftp_connect($ftp['host'], $ftp['username'], authcode($ftp['password'], 'DECODE', md5($authkey)), $ftp['attachdir'], $ftp['port'], $ftp['ssl']))) {return;}}dftp_delete($ftp['connid'], $filename);$havethumb && dftp_delete($ftp['connid'], $filename.'.thumb.jpg');} else {@unlink($attachdir.'/'.$filename);$havethumb && @unlink($attachdir.'/'.$filename.'.thumb.jpg');}}以下内容为程序代码:/*** 生成email连接用的,比如把图片点击可在新窗口打开查看*********************换成:<ahref="mailto:*********************">*********************</a>这样的形式* @para string $email* @para int $tolink*/function emailconv($email, $tolink = 1) {$email = str_replace(array('@', '.'), array('&#64;', '&#46;'), $email);return $tolink ? '<a href="mailto: '.$email.'">'.$email.'</a>': $email;}以下内容为程序代码:/*** 记录错误日志用的* @para string $type 错误类型* @para string $message 错误内容* @para int $halt 发生错误后是不是就马上停止论坛的运行**/function errorlog($type, $message, $halt = 1) {global $timestamp, $discuz_userss, $onlineip, $_SERVER;$user = empty($discuz_userss) ? '' : $discuz_userss.'<br>';$user .= $onlineip.'|'.$_SERVER['REMOTE_ADDR'];writelog('errorlog',dhtmlspecialchars("$timestamp\t$type\t$user\t".str_replace(array("\r", "\n"), array(' ', ' '), trim($message))));if($halt) {dexit();}}以下内容为程序代码:/*** 判断访问者是不是robot** @return boolean*/function getrobot() {if(!defined('IS_ROBOT')) {$kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';$kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla';if(preg_match("/($kw_browsers)/",$_SERVER['HTTP_USER_AGENT'])) {define('IS_ROBOT', FALSE);} elseif(preg_match("/($kw_spiders)/", $_SERVER['HTTP_USER_AGENT'])) {define('IS_ROBOT', TRUE);} else {define('IS_ROBOT', FALSE);}}return IS_ROBOT;}以下内容为程序代码:/*** 得到一个文件的扩展名* @para string $filename** @return string*/function fileext($filename) {return trim(substr(strrchr($filename, '.'), 1, 10));}以下内容为程序代码:/*** 用当前时间,会员名,uid,密码,authkey生成一个form hash(哈希)** @return string*/function formhash() {global $discuz_user, $discuz_uid, $discuz_pw, $timestamp, $discuz_auth_key;return substr(md5(substr($timestamp, 0, -7).$discuz_user.$discuz_uid.$discuz_pw.$discuz_auth_key), 8, 8);}以下内容为程序代码:/*** 生成论坛访问权限的字串,以|隔开* @para string $permstr 访问权限字串** @return string*/function forumperm($permstr) {global $groupid, $extgroupids;$groupidarray = array($groupid);foreach(explode("\t", $extgroupids) as $extgroupid) {if($extgroupid = intval(trim($extgroupid))) {$groupidarray[] = $extgroupid;}}return preg_match("/(^|\t)(".implode('|', $groupidarray).")(\t|$)/", $permstr);}以下内容为程序代码:/*** 得到用户组,同步groupid和member['groupid'],当会员积分和当前积分不一致更新members表。

discuz相关语句解释

discuz相关语句解释

模板中语句介绍!
注册模块:
判断是否登录
<!--{if $discuz_uid}--><!--{/if}-->
判断是否是管理员登录如果adminid和discuz_id 都大于1 则显示{lang modcp}版主管理
如果adminid和discuz_id 都等于1,则显示{lang admincp} 系统管理
<!--{if $discuz_uid && $adminid > 1}--> <!--{/if}-->
<!--{if $discuz_uid && $adminid == 1> <!--{/if}-->
判断是否设置新手任务:
<!--{if $taskon}--> <!--{/if}-->
判断是否已经申请新手任务
{if $doingtask}
<a id="task_ntc" {if $doingtask}href="task.php?item=doing" class="new" title="{lang task_unfinish}"{else}href="task.php"{/if} target="_blank">{lang task}</a>
解释为:如果申请了新手任务则鼠标放在论坛任务上时有提示”你有未完成任务”如果没有申请则显示论坛任务,二次点击论坛任务的执行文件地址也是不一样的。

单独模板中的注册模块完全可以参照头部模板文件header.htm 文件的写法来改进。

Discuz代码大全

Discuz代码大全

Discuz!代码大全大家在论坛发表主题或回帖时,经常要用到Discuz!代码,本文就常用的Discuz!代码作一个介绍,请大家认真学习。

以下代码可能会由于不同Discuz!版本或者管理员关闭部分功能而无法使用Discuz!! 代码是一个HTML 代码的简化版本,来简化对帖子显示格式的控制。

1、字体加粗代码:[b]字体加粗[/b] 效果:字体加粗2、斜体文字代码:[i]斜体文字[/i] 效果:斜体文字3、下划线文字代码:[u]下划线文字[/u] 效果:下划线文字4、字体颜色代码:[color=red]字体颜色[/color] 效果:字体颜色说明:"color=red"等号后面的是颜色的英文单词,类似的还有蓝色:blue、绿色:green、粉色:pink、灰色:gray等,同样也可以使用颜色的16进制代码,比如"FF6600"5、字体大小代码:[size=3]字体大小为3[/size] 效果:字体大小为3说明:本论坛字体大小范围是从"1"——"7"。

6、改变字体代码:[font=黑体]字体为黑体[/font] 效果:字体为黑体说明:"font=黑体"等号后面的为字体名字,字体必需使用论坛已用的字体库,否则无法辨认。

论坛的中文字体默认为宋体,英文字母默认字体为Tahoma。

各支持字体效果如下:QUOTE: 宋体黑体Arial Book Antiqua Century Gothic Courier New Georgia Impact Tahoma Times New Roman Verdana7、对齐格式代码:[align=center]居中对齐[/align]效果:居中对齐说明:"align="等号后面是对齐格式,左对齐为left,居中为center,右对齐为right。

8、飞行效果代码:[fly]飞行效果[/fly]效果:飞行效果9、超链接代码:[url]/[/url] 效果:/10、文字超链接代码:[url=//]中安在线[/url] 效果:中安在线11、电子邮件链接代码:[email=123@163]***********[/email]效果:***********12、文字电子邮件链接代码:[email=123@163]123的邮箱[/email] 效果:123的邮箱13、引用文字代码:[quote]被引用文字[/quote] 效果:QUOTE: 被引用文字14、列表代码:[list] 列表项目1 列表项目2 列表项目3 [/list] 效果:列表项目1 列表项目2 列表项目315、项目符号代码:[*] 效果:·16、链接图片代码:[img]图片地址[/img] 说明:可以对链接的图片进行尺寸限制代码:[img=176,62]图片地址[/img]效果:17、链接Flash 代码:[swf]flash地址[/swf] [flash]flash地址[/flash]18、wma链接音乐代码:[wma]wma音乐链接[/wma] 说明:由于插件是WMP播放器,所有只能支持WMP默认能播放的音频。

跟我读Dizcuz!代码

跟我读Dizcuz!代码

www目录下的index.php是用户访问discuz!论坛的调用的必经代码。

本节通过仔细查看index.php的重要代码,来分析其功能。

1.if(!empty($_SERVER['QUERY_STRING']) && is_numeric($_SERVER['QUERY_STRING'])) {2.$_ENV['curapp'] = 'home';3.$_GET = array('mod'=>'space', 'uid'=>$_SERVER['QUERY_STRING']);第一行里,$_server是web服务器所用的信息,具体见下面的链接/?mod=blog&tid=753。

$_SERVER['QUERY_STRING']是URL 中第一个问号? 之后的内容。

在本地访问$_server,得到下列信息:[HTTP_HOST] => localhost[HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101Firefox/11.0[HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [HTTP_ACCEPT_LANGUAGE] => zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3[HTTP_ACCEPT_ENCODING] => gzip, deflate[HTTP_CONNECTION] => keep-alive[HTTP_COOKIE] => wGTB_2132_saltkey=fwo9B3kk; wGTB_2132_lastvisit=1334563680; wGTB_2132_sid=Gjdc3e; wGTB_2132_lastact=1334568082%09home.php%09misc;wGTB_2132_home_diymode=1[HTTP_CACHE_CONTROL] => max-age=0 [PA TH] => c:\Program Files\AMDAPP\bin\x86;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\Sys tem32\WindowsPowerShell\v1.0\;C:\ProgramFiles\Tencent\QQPCMgr\6.6.2162.401;D:\wamp\php;D:\wamp\php\ext;C:\ProgramFiles\MySQL\MySQL Server 5.5\bin;[SystemRoot] => C:\Windows[COMSPEC] => C:\Windows\system32\cmd.exe[PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC [WINDIR] => C:\Windows[SERVER_SIGNATURE] =>[SERVER_SOFTWARE] => Apache/2.2.18 (Win32) PHP/5.2.10[SERVER_NAME] => localhost[SERVER_ADDR] => 127.0.0.1 [SERVER_PORT] => 80[REMOTE_ADDR] => 127.0.0.1[DOCUMENT_ROOT] => D:/www[SERVER_ADMIN] => bdai@[SCRIPT_FILENAME] => D:/www/bin/test.php[REMOTE_PORT] => 50118[GA TEW AY_INTERFACE] => CGI/1.1[SERVER_PROTOCOL] => HTTP/1.1[REQUEST_METHOD] => GET[QUERY_STRING] =>[REQUEST_URI] => /bin/test.php[SCRIPT_NAME] => /bin/test.php[PHP_SELF] => /bin/test.php[REQUEST_TIME] => 1334568451[argv] => Array ( ) [argc] => 0 )4.} else {5.$url = '';6.$domain = $_ENV = array();7.$jump = false;8.@include_once './data/sysdata/cache_domain.php';9.$_ENV['domain'] = $domain;10.if(empty($_ENV['domain'])) {这里,首先要关注的是@include_once,其作用是包含并只执行一次指定代码。

Discuz!目录结构分析

Discuz!目录结构分析
memcp_credits.htm 控制面板——积分交易
memcp_home.htm 控制面板——首页
memcp_misc.htm 控制面板——好友列表、订阅列表、收藏夹
memcp_navbar.htm 控制面板——上面那个菜单条
memcp_profile.htm 控制面板——编辑个人资料
serverbusy.htm 系统错误信息
bbcode.js Discuz!代码JS效果文件
common.js 主要是DZ常用的模板函数文件,可以直接用
floatadv.js 广告用的
qihoo.js 奇虎的文件,不改
threadpay.inc.php 出售帖
template.func.php 控制模板缓存生成的文件
cache_index.php 在线列表、联盟论坛、公告
cache_ipbanned.php 封IP段记录
cache_medals.php 勋章信息
cache_post.php smilies、bbcode、icons
cache_profilefields.php 暂时不清楚
digest.htm 精华区主题
emailfriend.htm EMAIL推荐主题
faq.htm FAQ帮助手册,下面都是,只不过显示部分不一样,省略。
footer.htm 论坛底部信息
forumdisplay.htm 论坛主题列表
forumdisplay_subforum.htm 二级论坛列表
chinese.class.php 处理乱码和字符集用的
category.inc.php 控制帖数,今日发帖数的统计
cache.func.php 控制生成缓存文件的程序

DISCUZ论坛代码大全

DISCUZ论坛代码大全

DISCUZ论坛代码大全1.[ u]文字:在文字的位置可以任意加入您需要的字符,显示为下划线效果。

2.[ align=center]文字:在文字的位置可以任意加入您需要的字符,center位置center表示居中,left表示居左,right表示居右。

5.[ color=red]文字:输入您的颜色代码,在标签的中间插入文字可以实现文字颜色改变。

6.[ SIZE=数字]文字:输入您的字体大小,在标签的中间插入文字可以实现文字大小改变。

7.[ font=隶书]改变字体8.[ FLY]飞翔的文字[/FLY]:在标签的中间插入文字可以实现文字飞翔效果,类似跑马灯。

9.[ MOVE]移动的文字[/MOVE]:在标签的中间插入文字可以实现文字移动效果,来回飘动。

10.[FLIPH左右颠倒文字/FLIPH]11.[FLIPV]上下颠倒文字[/FLIPV]12.[GLOW=255,red,2]文字[/GLOW]:在标签的中间插入文字可以实现文字发光特效,glow 内属性依次为宽度、颜色和边界大小。

13.[BLUR=文字宽度,方向,浓度]模糊文字[/BLUR]14.[SHADOW=255,red,2]文字[/SHADOW]:在标签的中间插入文字可以实现文字阴影特效,shadow内属性依次为宽度、颜色和边界大小。

15.[ url=/]/[/url][ url=/]康盛创想[/url]:有两种方法可以加入超级连接,可以连接具体地址或者文字连接。

本文由过期域名抢注域名抢注整理16.[ img]图片地址[/img] :在标签的中间插入图片地址可以实现插图效果。

17.[ email]给我发email[/email] 发email给我18.[ wmv=360,65,1]视频、mp3文件的链接地址[/wmv]这是论坛最常使用的插入视频或者mp3文件的格式。

360,65,1是播放器窗口的宽和高,可自行设定大小。

19.[ FLASH=宽度,高度]Flash连接地址[/FLASH] 手动控制20.[ swf]Flash连接地址[/swf] 自动控制大小在标签的中间插入Flash图片地址可以实现插入Flash。

discuz数据字典(数据库表详解)

discuz数据字典(数据库表详解)

discuz数据字典(数据库表详解)Discuz数据字典帮助开发人员迅速整合与二次开发。

出自Discuz! 技术文库跳转到:导航, 搜索CREATE TABLE pre_common_admincp_cmenu (`id` SMALLINT(6) UNSIGNED NOT NULL AUTO_INCREMENT, `title` V ARCHAR(255) NOT NULL COMMENT '菜单名称',`url` VARCHAR(255) NOT NULL COMMENT '菜单地址',`sort` TINYINT(1) NOT NULL DEFAULT '0' COMMENT '菜单类型,备用',`displayorder` TINYINT(3) NOT NULL COMMENT '显示顺序', `clicks` SMALLINT(6) UNSIGNED NOT NULL DEFAULT '1' COMMENT '点击数,备用', `uid` MEDIUMINT(8) UNSIGNED NOT NULL COMMENT '添加用户',`dateline` INT(10) UNSIGNED NOT NULL COMMENT '添加时间',PRIMARY KEY (`id`),KEY `uid` (`uid`),KEY `displayorder` (`displayorder`)) ENGINE=MYISAM COMMENT='后台菜单收藏表';CREATE TABLE pre_common_admingroup (admingid smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '所属管理员分组ID', alloweditpost tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许编辑帖子', alloweditpoll tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许编辑投票', allowstickthread tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许置顶主题', allowmodpost tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许审核帖子', allowdelpost tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许删除帖子', allowmassprunetinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许批量删帖', allowrefund tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许强制退款', allowcensorword tinyint(1) NOT NULL DEFAULT '0' COMMENT '兼容性字段', allowviewip tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许查看IP', allowbanip tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许禁止IP', allowedituser tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许编辑用户', allowmoduser tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许审核用户', allowbanuser tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许禁止用户发言', allowbanvisituser tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许禁止用户访问', allowpostannounce tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许发布站点公告',allowviewlog tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许查看管理日志', allowbanpost tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许屏蔽帖子',supe_allowpushthread tinyint(1) NOT NULL DEFAULT '0' COMMENT '兼容性字段', allowhighlightthread tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许高亮主题', allowdigestthread tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许精华主题', allowrecommendthread tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许推荐主题',allowbumpthread tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许提升主题', allowclosethread tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许关闭主题', allowmovethread tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许移动主题', allowedittypethread tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许编辑主题分类',allowstampthread tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许添加主题图章', allowstamplist tinyint(1) NOTNULL DEFAULT '0' COMMENT '是否允许添加主题图标', allowcopythread tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许复制主题', allowmergethread tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许合并主题', allowsplitthread tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许分割主题', allowrepairthread tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许修复主题', allowwarnpost tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许警告帖子', allowviewreport tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许查看用户报告', alloweditforum tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许编辑版块', allowremovereward tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许移除悬赏', allowedittrade tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许编辑商品', alloweditactivity tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许管理活动报名者',allowstickreply tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许置顶回帖', allowmanagearticle tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许管理所有文章',allowaddtopic tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许创建专题', allowmanagetopic tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许管理专题', allowdiy tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许DIY', allowclearrecycle tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许删除回收站的帖子',allowmanagetag tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许管理标签', managefeed tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许管理动态(feed)', managedoing tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许管理记录', manageshare tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许管理分享', manageblog tinyint(1) NOT NULL DEFAULT '0'COMMENT '是否允许管理日志', managealbum tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许管理相册', managecomment tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许管理评论', managemagiclog tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许管理道具记录', managereport tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许管理举报', managehotuser tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许管理推荐成员', managedefaultuser tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许管理推荐好友',managevideophoto tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许管理视频认证',managemagic tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许管理道具', manageclick tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许管理表态动作', PRIMARY KEY (admingid) ) ENGINE=MyISAM COMMENT='管理组表';CREATE TABLE pre_common_adminnote (id mediumint(8) unsigned NOT NULL auto_increment COMMENT '后台留言id', admin varchar(15) NOT NULL default '' COMMENT '管理员姓名',access tinyint(3) NOT NULL default '0' COMMENT '哪组可以看到信息',adminid tinyint(3) NOT NULL default '0' COMMENT '管理员id',dateline int(10) unsigned NOT NULL default '0' COMMENT '发表时间',expiration int(10) unsigned NOT NULL default '0' COMMENT '过期时间',message text NOT NULL COMMENT '消息',PRIMARY KEY (id)) ENGINE=MyISAM COMMENT='后台留言表';CREATE TABLE pre_common_advertisement (advid mediumint(8) unsigned NOT NULL auto_increment COMMENT '广告id', available tinyint(1) NOT NULL default '0' COMMENT '是否启用',`type` varchar(50) NOT NULL default '0' COMMENT '类型',displayorder tinyint(3) NOT NULL default '0' COMMENT '显示顺序',title varchar(255) NOT NULL default '' COMMENT '广告标题', targets text NOT NULL COMMENT '投放范围',parameters text NOT NULL COMMENT '参数\n序列化存放的数组数据',`code` text NOT NULL COMMENT '代码',starttime int(10) unsigned NOT NULL default '0' COMMENT '开始时间',endtime int(10) unsigned NOT NULL default '0' COMMENT '结束时间',PRIMARY KEY (advid)) ENGINE=MyISAM COMMENT='广告数据表';CREATE TABLE pre_common_advertisement_custom (`id` smallint(5) unsigned NOT NULL auto_increment COMMENT '自定义广告类型id', `name` varchar(255) NOT NULL COMMENT '名称',PRIMARY KEY (`id`),KEY `name` (`name`)) ENGINE=MyISAM COMMENT='自定义广告数据表';CREATE TABLE pre_common_banned (id smallint(6) unsigned NOT NULL auto_increment COMMENT '禁止id',ip1 smallint(3) NOT NULL default '0' COMMENT 'IP分段1', ip2 smallint(3) NOT NULL default '0' COMMENT 'IP分段2',ip3 smallint(3) NOT NULL default '0' COMMENT 'IP分段3', ip4 smallint(3) NOT NULL default '0' COMMENT 'IP分段4', admin varchar(15) NOT NULL default '' COMMENT '管理员姓名',dateline int(10) unsigned NOT NULL default '0' COMMENT '禁止时间',expiration int(10) unsigned NOT NULL default '0' COMMENT '过期时间',PRIMARY KEY (id)) ENGINE=MyISAM COMMENT='禁止访问表';CREATE TABLE pre_common_cache (cachekey varchar(255) NOT NULL default '',cachevalue mediumblob NOT NULL,dateline int(10) unsigned NOT NULL default '0',PRIMARY KEY (cachekey)) ENGINE=MyISAM COMMENT='通用缓存表';CREATE TABLE pre_common_card (id char(255) NOT NULL default '' COMMENT '生成的卡片号码',typeid smallint(6) unsigned NOT NULL default '1' COMMENT '卡片分类',maketype tinyint(1) NOT NULL default '0' COMMENT '卡片生成的方法',makeruid mediumint(8) unsigned NOT NULL default '0' COMMENT '卡片生成者uid',`price` mediumint(8) unsigned NOT NULL default '0' COMMENT '卡片面值',`extcreditskey` tinyint(1) NOT NULL default '0' COMMENT '充值积分种类',`extcreditsval` int(10) NOT NULL default '0' COMMENT '积分数额',`status` tinyint(1) unsigned NOT NULL default '1' COMMENT '卡片状态(位与):1:可用,2:已用',dateline int(10) unsigned NOT NULL default '0' COMMENT '卡片生成时间', cleardateline int(10) unsigned NOT NULL default '0' COMMENT '卡片清理时间', useddateline int(10) unsigned NOT NULL default '0' COMMENT '使用时间',uid mediumint(8) unsigned NOT NULL default '0' COMMENT '使用者',PRIMARY KEY (id),KEY `dateline` (`dateline`)) ENGINE=MyISAM COMMENT='充值卡密表';CREATE TABLE pre_common_card_log (id smallint(6) NOT NULL auto_increment COMMENT '生成的卡片号码',`uid` mediumint(8) NOT NULL default '0' COMMENT '卡片生成者',`username` varchar(20) NOT NULL default '' COMMENT '卡片生成者',cardrule varchar(255) NOT NULL default '' COMMENT '卡片生成规则',`info` text NOT NULL default '' COMMENT '卡片生成log',dateline INT(10) unsigned NOT NULL default '0' COMMENT '本次log生成时间', description mediumtext NOT NULL default '' COMMENT '卡片描述',operation tinyint(1) NOT NULL default '0' COMMENT '操作动作(位与):1:生成,2:任务生成,4:删除,9:卡片过期',PRIMARY KEY (id),KEY `dateline` (`dateline`),KEY `operation_dateline` (`operation`, `dateline`)) ENGINE=MyISAM COMMENT='充值卡密表';CREATE TABLE pre_common_card_type (id smallint(6) NOT NULL auto_increment COMMENT '卡片分类ID',typename char(20) NOT NULL default '' COMMENT '分类名称',PRIMARY KEY (id)) ENGINE=MyISAM COMMENT='卡片分类表';CREATE TABLE pre_common_credit_log (`uid` mediumint(8) unsigned NOT NULL default '0' COMMENT '所属用户uid',`operation` char(3) NOT NULL default '' COMMENT '操作类型',`relatedid` int(10) unsigned NOT NULL COMMENT '操作相关ID',`dateline` int(10) unsigned NOT NULL COMMENT '记录时间', `extcredits1` int(10) NOT NULL COMMENT '积分1变化值',`extcredits2` int(10) NOT NULL COMMENT '积分2变化值',`extcredits3` int(10) NOT NULL COMMENT '积分3变化值',`extcredits4` int(10) NOT NULL COMMENT '积分4变化值',`extcredits5` int(10) NOT NULL COMMENT '积分5变化值',`extcredits6` int(10) NOT NULL COMMENT '积分6变化值',`extcredits7` int(10) NOT NULL COMMENT '积分7变化值',`extcredits8` int(10) NOT NULL COMMENT '积分8变化值',KEY `uid` (`uid`),KEY `operation` (`operation`),KEY `relatedid` (`relatedid`),KEY `dateline` (`dateline`)) ENGINE=MyISAM COMMENT='积分日志表';CREATE TABLE pre_common_credit_rule_log (clid mediumint(8) unsigned NOT NULL auto_increment COMMENT '策略日志ID',uid mediumint(8) unsigned NOT NULL default '0' COMMENT '策略日志所有者uid',rid mediumint(8) unsigned NOT NULL default '0' COMMENT '策略ID',fid mediumint(8) unsigned NOT NULL default '0' COMMENT '版块ID',total mediumint(8) unsigned NOT NULL default '0' COMMENT '策略被执行总次数', cyclenum mediumint(8) unsigned NOT NULL default '0' COMMENT '周期被执行次数', extcredits1 int(10) NOT NULL default '0' COMMENT '扩展1',extcredits2 int(10) NOT NULL default '0' COMMENT '扩展2', extcredits3 int(10) NOT NULL default '0' COMMENT '扩展3', extcredits4 int(10) NOT NULL default '0' COMMENT '扩展4', extcredits5 int(10) NOT NULL default '0' COMMENT '扩展5', extcredits6 int(10) NOT NULL default '0' COMMENT '扩展6', extcredits7 int(10) NOT NULL default '0' COMMENT '扩展7', extcredits8 int(10) NOT NULL default '0' COMMENT '扩展8', starttime int(10) unsigned NOT NULL default '0' COMMENT '周期开始时间',dateline int(10) unsigned NOT NULL default '0' COMMENT '策略最后执行时间', PRIMARY KEY (clid),KEY uid (uid,rid, fid),KEY dateline (dateline)) ENGINE=MyISAM COMMENT='积分规则日志表';CREATE TABLE pre_common_credit_rule_log_field (clid mediumint(8) unsigned NOT NULL default '0' COMMENT '策略日志ID',uid mediumint(8) unsigned NOT NULL default '0' COMMENT'策略日志所有者uid',info text NOT NULL COMMENT '记录信息防重',`user` text NOT NULL COMMENT '记录用户防重',app text NOT NULL COMMENT '记录应用防重',PRIMARY KEY (uid, clid)) ENGINE=MyISAM;CREATE TABLE pre_common_credit_rule (rid mediumint(8) unsigned NOT NULL auto_increment COMMENT '规则ID',rulename varchar(20) NOT NULL default '' COMMENT '规则名称',`action` varchar(20) NOT NULL default '' COMMENT '规则action唯一KEY',cycletype tinyint(1) NOT NULL default '0' COMMENT '奖励周期0:一次;1:每天;2:整点;3:间隔分钟;4:不限;',cycletime int(10) NOT NULL default '0' COMMENT '间隔时间',rewardnum tinyint(2) NOT NULL default '1' COMMENT '奖励次数',norepeat tinyint(1) NOT NULL default '0' COMMENT '是否去重1:去重;0:不去重', extcredits1 int(10) NOT NULL default '0' COMMENT '扩展1',extcredits2 int(10) NOT NULL default '0' COMMENT '扩展2', extcredits3 int(10) NOT NULL default '0' COMMENT '扩展3', extcredits4 int(10) NOT NULL default '0' COMMENT '扩展4', extcredits5 int(10) NOT NULL default '0' COMMENT '扩展5', extcredits6 int(10) NOT NULL default '0' COMMENT '扩展6', extcredits7 int(10) NOT NULL default '0' COMMENT '扩展7', extcredits8 int(10) NOT NULL default '0' COMMENT '扩展8', fids text NOT NULL COMMENT '记录自定义策略版块ID',PRIMARY KEY (rid),UNIQUE KEY `action` (`action`)) ENGINE=MyISAM COMMENT='积分规则表';CREATE TABLE pre_common_cron (cronid smallint(6) unsigned NOT NULL auto_increment COMMENT '计划任务id',available tinyint(1) NOT NULL default '0' COMMENT '是否启用',`type` enum('user','system') NOT NULL default 'user' COMMENT '类型',`name` char(50) NOT NULL default '' COMMENT '名称',filename char(50) NOT NULL default '' COMMENT '对应文件', lastrun int(10) unsigned NOT NULL default '0' COMMENT '上次执行时间',nextrun int(10) unsigned NOT NULL default '0' COMMENT '下次执行时间',weekday tinyint(1) NOT NULL default '0' COMMENT '周计划', `day` tinyint(2) NOT NULL default '0' COMMENT '日计划',`hour` tinyint(2) NOT NULL default '0' COMMENT '小时计划', `minute` char(36) NOT NULL default '' COMMENT '分计划',PRIMARY KEY (cronid),KEY nextrun (available,nextrun)) ENGINE=MyISAM COMMENT='计划任务表';CREATE TABLE pre_common_domain (domain char(30) NOT NULL default '' COMMENT '域名前缀', domainroot char(60) NOT NULL default '' COMMENT '二级域名后缀',id mediumint(8) unsigned NOT NULL default '0' COMMENT '对应对象id',idtype char(15) NOT NULL default '' COMMENT '对应对象类型subarea:分区、forum:版块、home:个人空间、group:群组、topic:专题、channel:频道',PRIMARY KEY (id, idtype),KEY domain (domain, domainroot),KEY idtype (idtype)) ENGINE=MyISAM COMMENT='二级域名表';CREATE TABLE pre_common_failedlogin (ip char(15) NOT NULL default '' COMMENT '失败IP',username char(15) NOT NULL default '' COMMENT '失败时的用户名',count tinyint(1) unsigned NOT NULL default '0' COMMENT '尝试次数', lastupdate int(10) unsigned NOT NULL default '0' COMMENT '最后一次尝试时间', PRIMARY KEY (ip,username) ) ENGINE=MyISAM COMMENT='失败登录表';CREATE TABLE pre_common_friendlink (id smallint(6) unsigned NOT NULL auto_increment COMMENT 'id', displayorder tinyint(3) NOT NULL default '0' COMMENT '显示顺序,正序',`name` varchar(100) NOT NULL default '' COMMENT '名称', url varchar(255) NOT NULL default '' COMMENT 'url',description mediumtext NOT NULL COMMENT '解释说明',logo varchar(255) NOT NULL default '' COMMENT 'logo',`type` tinyint(3) NOT NULL default '0',PRIMARY KEY (id)) ENGINE=MyISAM COMMENT='友情链接表' ;CREATE TABLE pre_common_relatedlink (id smallint(6) unsigned NOT NULL auto_increment COMMENT 'id',`name` varchar(100) NOT NULL default '' COMMENT '名称', url varchar(255) NOT NULL default '' COMMENT 'url',`extent` tinyint(3) NOT NULL default '0',PRIMARY KEY (id)) ENGINE=MyISAM COMMENT='关联链接表' ;CREATE TABLE pre_common_invite (id mediumint(8) unsigned NOT NULL auto_increment COMMENT 'ID',uid mediumint(8) unsigned NOT NULL default '0' COMMENT '邀请人',`code` char(20) NOT NULL default '' COMMENT '邀请码',fuid mediumint(8) unsigned NOT NULL default '0' COMMENT '受邀人UID', fusername char(20) NOT NULL default '' COMMENT '受邀人姓名',`type` tinyint(1) NOT NULL default '0' COMMENT '',email char(40) NOT NULL default '' COMMENT '邀请Email', inviteip char(15) NOT NULL default '' COMMENT '邀请IP',appid mediumint(8) unsigned NOT NULL default '0' COMMENT '应用ID', dateline int(10) unsigned NOT NULL default '0' COMMENT '邀请码生成时间', endtime int(10) unsigned NOT NULL default '0' COMMENT '邀请码结束时间', regdateline int(10) unsigned NOT NULL DEFAULT '0' COMMENT '注册时间', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '邀请码状态',orderid char(32) NOT NULL default '' COMMENT '购买邀请码的订单号id',PRIMARY KEY (id),KEY uid (uid, dateline)) ENGINE=MyISAM COMMENT='邀请表';CREATE TABLE pre_common_mailcron (cid mediumint(8) unsigned NOT NULL auto_increment,touid mediumint(8) unsigned NOT NULL default '0',email varchar(100) NOT NULL default '',sendtime int(10) unsigned NOT NULL default '0',PRIMARY KEY (cid),KEY sendtime (sendtime)) ENGINE=MyISAM COMMENT='邮件计划任务表';CREATE TABLE pre_common_mailqueue (qid mediumint(8) unsigned NOT NULL auto_increment,cid mediumint(8) unsigned NOT NULL default '0',`subject` text NOT NULL,message text NOT NULL,dateline int(10) unsigned NOT NULL default '0',PRIMARY KEY (qid),KEY mcid (cid,dateline)) ENGINE=MyISAM COMMENT='邮件队列表';CREATE TABLE pre_common_member (uid mediumint(8) unsigned NOT NULL auto_increment COMMENT '会员id',email char(40) NOT NULL default '' COMMENT '邮箱',username char(15) NOT NULL default '' COMMENT '用户名', `password` char(32) NOT NULL default '' COMMENT '密码', `status` tinyint(1) NOT NULL default '0' COMMENT '判断用户是否已经删除需要discuz程序加判断,并增加整体清理的功能。

discuz的模板制作与源代码分析

discuz的模板制作与源代码分析

discuz的模板制作与源代码分析各位网友,大家好!我是德阳热线论坛管理员()欢迎大家到我站看看,许多使用discuz的人都会自然的想到论坛的风格、样式和模板,如何修改它,如何让它符合心中的要求,相信大家只要对discuz的模板源代码进行钻研的话,那就肯定能够自己独立修改,并且达到自己想要的风格和样式。

但是discuz的源代码极为精简,而且无注释,采用的方法多变,对象、函数等等都不易理解,无疑让大家对模板源代码头痛不已。

俗语说得好,授人以鱼不如授人以渔,我在这里不讲如局具体修改什么,而是讲一讲discuz模板的工作原理和源代码的拆开。

说到模板风格,大家自然想到的就是templates文件夹下的default模板,这里面的文件众多,它是discuz的默认模板。

在这个文件夹里的模板文件很多,最常使用到的,比如说header.htm和footer.htm两个文件,它们分别是论坛的头部和底部,在其它模板里都必须调用这两个文件,是以大家可以看到,在论坛的所有页面里,头部和底部都是相同的。

论坛最常见的三个页面,一个是主页,也就是通常的index.php,还有是主题列表页,以及帖子内容页,下面以index.php来讲述discuz模板的原理以及它牵扯到的文件。

首先我们打开index.php,在这个文件的开头是discuz作者的声明。

然后就是//定义页面define('CURSCRIPT','index');//包含common文件和forum函数库require_once'./include/common.inc.php';require_once DISCUZ_ROOT.'./include/forum.func.php';大家可以看到这里很重要的两句,就是使用require_once函数来包含两个文件,在common.inc.php里存放的是一些常用数据,而在forum.func.php里存放的是有关版块的函数,把这些分离开来单独作为一个文件,是因为这些东西会在多个文件里使用,是以为了循环利用以及代码的精简性,他们被放在一个单独的文件里。

【推荐下载】Discuz!源代码分析系列-.-include-global.func.php(1)

【推荐下载】Discuz!源代码分析系列-.-include-global.func.php(1)

Discuz!源代码分析系列:./include/global.func.php(1) 2011/12/06 10 转自discuz 作者:郭鑫if(!defined(‘IN_DISCUZ’)) { exit(‘Access Denied’);}//防非法引用的复制内容到剪贴板代码:/*** 这一个部分是生成discuz authcode 的,用的是base64 加密,分别能加密和解密。

通过传入$operation =‘ENCODE’|’DECODE’来实现。

* @para string $string 要加/解密的string* @para string $operation 方法(个人觉得用boolean 比较好) * @para string $key 用来加密的key* * @return string*/function authcode($string, $operation, $key = ‘‘){ $key = md5($key ? $key : $GLOBALS[‘discuz_auth_key’]); $key_length = strlen($key); $string = $operation == ‘DECODE’? base64_decode($string) : substr(md5($string.$key), 0, 8).$string; $string_length = strlen($string); $rndkey = $box = array(); $result = ‘‘; for($i = 0; $i = 255; $i++) { $rndkey[$i] = ord($key[$i % $key_length]); $box[$i] = $i; } for($j =$i = 0; $i 256; $i++) { $j = ($j + $box[$i] + $rndkey[$i]) % 256; $tmp = $box[$i]; $box[$i] = $box[$j]; $box[$j] = $tmp; } for($a = $j = $i = 0; $i $string_length; $i++) { $a= ($a + 1) % 256; $j = ($j + $box[$a]) % 256; $tmp = $box[$a]; $box[$a]return ‘‘; } } else { return str_replace(‘=‘,‘‘, base64_encode($result)); }}复制内容到剪贴板代码:/*** 这个是用来清除所有的cookie 的*/function clearcookies() { global $discuz_uid, $discuz_user, $discuz_pw, $discuz_secques, $adminid, $credits; dsetcookie(‘sid’,‘‘,- 86400 * 365); dsetcookie(‘auth’,‘‘,-86400 * 365); dsetcookie(‘visitedfid’,‘‘,-86400 * 365); dsetcookie(‘onlinedetail’,‘‘, -86400 * 365, 0); $discuz_uid = $adminid = $credits = 0; $discuz_user = $discuz_pw = $discuz_secques = ‘‘;}复制内容到剪贴板代码:/*** 用来检查积分的最低要求的* @para array $creditsarray 传入积分数组* @para int $coef单位*/function checklowerlimit($creditsarray, $coef = 1) { if(is_array($creditsarray)) { global $extcredits, $id; foreach($creditsarray as $id = $addcredits) { if($addcredits * $coef 0 $GLOBALS[‘extcredits’.$id]- $addcredits $extcredits[$id][‘lowerlimit’]){ showmessage(‘credits_policy_lowerlimit’);} } }}复制内容到剪贴板代码:/*** 用来完美分词的,也就是把一段中文字只取前面一段,再加一个…* @para string $string 用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Discuz!源代码分析系列(1)--./include/common.inc.php第一个文件当然是分析./include/common.inc.php这个文件,这个是Discuz的核心中的核心,基本上每次操作都include到了这个文件,下面就分七段来分析这个文件:Section One://定义PHP一些环境error_reporting(0); //关闭所有错误提示信息,避免把错误信息泄露给用户。

set_magic_quotes_runtime(0);//关闭magic_quotes_runtime; 参见get_magic_quotes_runtime(), magic_quotes_runtime, magic_quote_gpc.//设置Discuz开始的时间$mtime = explode(' ', microtime());$discuz_starttime = $mtime[1] + $mtime[0];//定义一些常量define('SYS_DEBUG', FALSE);define('IN_DISCUZ', TRUE);define('DISCUZ_ROOT', substr(dirname(__FILE__), 0, -7)); //获得绝对目录//兼容4.1.0以下版本if(PHP_VERSION < '4.1.0') {$_GET = &$HTTP_GET_V ARS;$_POST = &$HTTP_POST_V ARS;$_COOKIE = &$HTTP_COOKIE_V ARS;$_SERVER = &$HTTP_SERVER_V ARS;$_ENV = &$HTTP_ENV_V ARS;$_FILES = &$HTTP_POST_FILES;}这一段基本上就是设置一下错误报告,把magic_quotes这个sick家伙给关了,然后定一个开始的时间,这样我们在论坛底部看到的Process Time就是通过这个开始的时间和一个结束的时间的差来计算的,然后定义一个IN_DISCUZ为真,这个IN_DISCUZ常量的作用就是在其他inc这样的包含文件中防止被非法引用,一旦没有这个常量的话就出现Access Denied 这样的字样然后退出。

然后获得Discuz运行的绝对目录。

接下来是判断PHP 的版本是4.1 以下还是以上,因为PHP以4.1为一个分界线,在4.1以下以$HTTP_GET_V ARS[‘xx’]这样的方式来得到get过来的值,而以后用$_GET来得到get过来的值,这样做的目的是为了无论是什么样的PHP版本,都能用$_GET这样的方式得到,有通用性~!Section Two:require_once DISCUZ_ROOT.'./include/global.func.php';把include/global.inc.php引用进来,这个文件是Discuz的核心函数文件,包含了Discuz用到的很多通用的函数,可以说它就是一个大的通用函数库。

define('ISROBOT', getrobot()); //getrobot()函数查询global.func.phpif(defined('NOROBOT') && ISROBOT) {exit(header("HTTP/1.1 403 Forbidden"));}这里是定义一个ISROBOT常量,看看浏览者是什么东东,比方说如果浏览者是一个robot 那么就直接来一个403 Forbidden了……define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());isset($_REQUEST['GLOBALS']) && exit('Access Error');foreach(array('_COOKIE', '_POST', '_GET') as $_request) {foreach($$_request as $_key => $_value) {$_key{0} != '_' && $$_key = daddslashes($_value); //&&左边表达式为false时,不执行右边语句}}//此处是过滤提交的变量用的,提高安全性的用法。

(!MAGIC_QUOTES_GPC) && $_FILES = daddslashes($_FILES);//认真学习预定义变量$_SERVER,$_ENV,$_COOKIE,$_POST,$_GET,$_REQUEST,$_FILES,$_SESSION,$_GLOBA LS$charset = $dbcharset = $forumfounders = $metakeywords = $extrahead = '';$plugins = $hooks = $admincp = array();require_once DISCUZ_ROOT.'./config.inc.php';$_DCOOKIE = $_DSESSION = $_DCACHE = $_DPLUGIN = $advlist = array();$prelength = strlen($cookiepre);foreach($_COOKIE as $key => $val) {if(substr($key, 0, $prelength) == $cookiepre) {$_DCOOKIE[(substr($key, $prelength))] = MAGIC_QUOTES_GPC ? $val : daddslashes($val);}}unset($prelength, $_request, $_key, $_value);初始化一些变量,然后引用config.inc.php这个配置文件,这样开始初始化程序的一些东西了。

接下来的一个循环把$_COOKIE中的东西取出来存到$_DCOOKIE这个数组中。

注意:在登陆的时候Discuz会把登陆信息存放到$_COOKIE中去。

在下面一段会有取出的代码。

$timestamp = time();if($attackevasive) {require_once DISCUZ_ROOT.'./include/security.inc.php';}这一部分代码是提高安全用的,防一些非法的入侵,include/security.inc.php文件中就是这样一些检查。

标记!!!!require_once DISCUZ_ROOT.'./include/db_'.$database.'.class.php';$PHP_SELF = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];$SCRIPT_FILENAME = str_replace('\\\\', '/', (isset($_SERVER['PATH_TRANSLATED']) ? $_SERVER['PATH_TRANSLATED'] : $_SERVER['SCRIPT_FILENAME']));$boardurl = 'http://'.$_SERVER['HTTP_HOST'].preg_replace("/\/+(api|archiver|wap)?\/*$/i", '', substr($PHP_SELF, 0, strrpos($PHP_SELF, '/'))).'/';if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { $onlineip = getenv('HTTP_CLIENT_IP');} elseif(getenv('HTTP_X_FORW ARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {$onlineip = getenv('HTTP_X_FORWARDED_FOR');} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $onlineip = getenv('REMOTE_ADDR');} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {$onlineip = $_SERVER['REMOTE_ADDR'];}第一行是把include/db_mysql.class.php引用进来,这个文件是一个数据库的类。

我觉得是不是放在这里太早了点?然后接下的作用就是得到自身的名称$PHP_SELF,自身的文件名字$SCRIPT_FILENAME,论坛的地址$boardurl,得到浏览者的一些信息,比方说ip地址,浏览器类型等等。

Section Three:preg_match("/[\d\.]{7,15}/", $onlineip, $onlineipmatches);$onlineip = $onlineipmatches[0] ? $onlineipmatches[0] : 'unknown';unset($onlineipmatches);看看ip是不是点分段,7-15个数字之间,用到了一个正则表达式,$cachelost = (@include DISCUZ_ROOT.'./forumdata/cache/cache_settings.php') ? '' : 'settings';@extract($_DCACHE['settings']);这一段是获得./forumdata/cache/cache_settings.php(即缓存下的设置数组,并展开,方面以后的写法if($gzipcompress && function_exists('ob_gzhandler') && CURSCRIPT != 'wap') {ob_start('ob_gzhandler');} else {$gzipcompress = 0;ob_start();}检查gzip是不是打开了,打开就用ob_gzhandler,没有就用ob_start。

相关文档
最新文档