码迷,mamicode.com
首页 > Web开发 > 详细

Discuz!常用函数解析

时间:2018-06-16 17:04:11      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:检测   rip   ecc   types   merge   input   time   arch   url   

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_lowerlimit‘);
                                } else {
                                        showmessage(‘credits_policy_num_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_once DISCUZ_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.$specialadd), 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 .= (@include DISCUZ_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‘);
                }
                return preg_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 ? ‘<a href="‘.$mpurl.‘page=‘.($curpage - 1).‘" class="prev"‘.$ajaxtarget.‘>??</a>‘ : ‘‘);
                for($i = $from; $i <= $to; $i++) {
                        $multipage .= $i == $curpage ? ‘<strong>‘.$i.‘</strong>‘ :
                                ‘<a href="‘.$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 ? ‘<a href="‘.$mpurl.‘page=‘.$pages.‘" class="last"‘.$ajaxtarget.‘>... ‘.$realpages.‘</a>‘ : ‘‘).
                        (!$simple && $pages > $page && !$ajaxtarget ? ‘<kbd><input type="text" name="custompage" size="3" /></kbd>‘ : ‘‘);
                $multipage = $multipage ? ‘<div class="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[] = "/\<a href\=\"forumdisplay\.php\?fid\=(\d+)(&page\=(\d+))?\"([^\>]*)\>/e";
                                $replacearray[] = "rewrite_forum(‘\\1‘, ‘\\3‘, ‘\\4‘)";
                        }
                        if($rewritestatus & 2) {
                                $searcharray[] = "/\<a href\=\"viewthread\.php\?tid\=(\d+)(&extra\=page\%3D(\d+))?(&page\=(\d+))?\"([^\>]*)\>/e";
                                $replacearray[] = "rewrite_thread(‘\\1‘, ‘\\5‘, ‘\\3‘, ‘\\6‘)";
                        }
                        if($rewritestatus & 4) {
                                $searcharray[] = "/\<a href\=\"space\.php\?(uid\=(\d+)|username\=([^&]+?))\"([^\>]*)\>/e";
                                $replacearray[] = "rewrite_space(‘\\2‘, ‘\\3‘, ‘\\4‘)";
                        }
                        if($rewritestatus & 8) {
                                $searcharray[] = "/\<a href\=\"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 如果定义了缓存常量,则此处将缓冲区的内容写入文件。如果为 index 缓存,则直接写入 forumdata/index.cache ,如果为 viewthread 缓存,则根据md5(tid,等参数)取前三位为目录加上$tid_$page,做文件名。
        //debug $threadcacheinfo, $indexcachefile 为全局变量
        if(defined(‘CACHE_FILE‘) && CACHE_FILE && !defined(‘CACHE_FORBIDDEN‘)) {
                global $cachethreaddir;
                if(diskfreespace(DISCUZ_ROOT.‘./‘.$cachethreaddir) > 1000000) {
                        if($fp = @fopen(CACHE_FILE, ‘w‘)) {
                                flock($fp, LOCK_EX);
                                fwrite($fp, empty($content) ? ob_get_contents() : $content);
                        }
                        @fclose($fp);
                        chmod(CACHE_FILE, 0777);
                }
        }
}
/**
* 时间段设置检测
* @param $periods - 那种时间段 $settings[$periods]  $settings[‘postbanperiods‘] $settings[‘postmodperiods‘]
* @param $showmessage - 是否提示信息
* @return 返回检查结果
*/
function periodscheck($periods, $showmessage = 1) {
        global $timestamp, $disableperiodctrl, $_DCACHE, $banperiods;
        if(!$disableperiodctrl && $_DCACHE[‘settings‘][$periods]) {
                $now = gmdate(‘G.i‘, $timestamp + $_DCACHE[‘settings‘][‘timeoffset‘] * 3600);
                foreach(explode("\r\n", str_replace(‘:‘, ‘.‘, $_DCACHE[‘settings‘][$periods])) as $period) {
                        list($periodbegin, $periodend) = explode(‘-‘, $period);
                        if(($periodbegin > $periodend && ($now >= $periodbegin || $now < $periodend)) || ($periodbegin < $periodend && $now >= $periodbegin && $now < $periodend)) {
                                $banperiods = str_replace("\r\n", ‘, ‘, $_DCACHE[‘settings‘][$periods]);
                                if($showmessage) {
                                        showmessage(‘period_nopermission‘, NULL, ‘NOPERM‘);
                                } else {
                                        return TRUE;
                                }
                        }
                }
        }
        return FALSE;
}
function postfeed($feed) {
        global $discuz_uid, $discuz_user;
        require_once DISCUZ_ROOT.‘./templates/default/feed.lang.php‘;
        require_once DISCUZ_ROOT.‘./uc_client/client.php‘;
        $feed[‘title_template‘] = $feed[‘title_template‘] ? $language[$feed[‘title_template‘]] : ‘‘;
        $feed[‘body_template‘] = $feed[‘title_template‘] ? $language[$feed[‘body_template‘]] : ‘‘;
        uc_feed_add($feed[‘icon‘], $discuz_uid, $discuz_user, $feed[‘title_template‘], $feed[‘title_data‘], $feed[‘body_template‘], $feed[‘body_data‘], ‘‘, ‘‘, $feed[‘images‘]);
}
/**
* 问题答案加密
* @param $questionid - 问题
* @param $answer - 答案
* @return 返回加密的字串
*/
function quescrypt($questionid, $answer) {
        return $questionid > 0 && $answer != ‘‘ ? substr(md5($answer.md5($questionid)), 16, 8) : ‘‘;
}
/**
* 产生伪静态地址
* @param $tid 主题id
* @param $page 页标
* @param $prevpage 上一页
* @param extra 扩展
* @return 返回链接
*/
function rewrite_thread($tid, $page = 0, $prevpage = 0, $extra = ‘‘) {
        return ‘<a href="thread-‘.$tid.‘-‘.($page ? $page : 1).‘-‘.($prevpage && !IS_ROBOT ? $prevpage : 1).‘.html"‘.stripslashes($extra).‘>‘;
}
/**
* 产生伪静态地址
* @param $fid 论坛id
* @param $page 页标
* @param extra 扩展
* @return 返回链接
*/
function rewrite_forum($fid, $page = 0, $extra = ‘‘) {
        return ‘<a href="forum-‘.$fid.‘-‘.($page ? $page : 1).‘.html"‘.stripslashes($extra).‘>‘;
}
function rewrite_space($uid, $username, $extra = ‘‘) {
        $GLOBALS[‘rewritecompatible‘] && $username = rawurlencode($username);
        return ‘<a href="space-‘.($uid ? ‘uid-‘.$uid : ‘username-‘.$username).‘.html"‘.stripslashes($extra).‘>‘;
}
function rewrite_tag($name, $extra = ‘‘) {
        $GLOBALS[‘rewritecompatible‘] && $name = rawurlencode($name);
        return ‘<a href="tag-‘.$name.‘.html"‘.stripslashes($extra).‘>‘;
}


/** * 产生随机码 * @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 = ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz; $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, $type = 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][$type]) ? $GLOBALS[infosidestatus][$type] : $GLOBALS[infosidestatus][f.$specialfid][$type]; $key = $cachekey; $cachekey .= _fid.$specialfid; } else { $specialfid = 0; $key = $cachekey; } $cachefile = DISCUZ_ROOT../forumdata/cache/request_.$cachekey..php; if((@!include($cachefile)) || $expiration < $timestamp) { require_once DISCUZ_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); } $show_message .= $url_forward && empty($inajax) ? <script>setTimeout("window.location.href =\‘.$url_forward.\‘;", .$msgforward[refreshtime].);</script> : ‘‘; if($advlist = array_merge($globaladvs ? $globaladvs[type] : array(), $redirectadvs ? $redirectadvs[type] : array())) { $advitems = ($globaladvs ? $globaladvs[items] : array()) + ($redirectadvs ? $redirectadvs[items] : array()); foreach($advlist AS $type => $redirectadvs) { $advlist[$type] = $advitems[$redirectadvs[array_rand($redirectadvs)]]; } } if($extra == NOPERM) { //get secure code checking status (pos. -2) if($seccodecheck = substr(sprintf(%05b, $seccodestatus), -2, 1)) { $seccode = random(6, 1) + $seccode{0} * 1000000; } include template(nopermission); } else { include template(showmessage); } dexit(); } /** * 显示等级 * @param $num - 等级 */ function showstars($num) { global $starthreshold; $alt = alt="Rank: .$num."; if(empty($starthreshold)) { for($i = 0; $i < $num; $i++) { echo <img src=".IMGDIR./star_level1.gif" .$alt. />; } } else { for($i = 3; $i > 0; $i--) { $numlevel = intval($num / pow($starthreshold, ($i - 1))); $num = ($num % pow($starthreshold, ($i - 1))); for($j = 0; $j < $numlevel; $j++) { echo <img src=".IMGDIR./star_level.$i..gif" .$alt. />; } } } } /** * 返回当前链接的域名 * @return 返回域名 */ function site() { return $_SERVER[HTTP_HOST]; } /** * 判断一个字符串是否在另一个字符串中存在 * @param haystack 待查找的字符串 * @param $needls 被查找的字符串 * @return 是否存在 */ function strexists($haystack, $needle) { return !(strpos($haystack, $needle) === FALSE); } /** * 验证码数字转字母 * @param seccode 带转换的验证码数字变量 */ function seccodeconvert(&$seccode) { global $seccodedata, $charset; $seccode = substr($seccode, -6); if($seccodedata[type] == 1) { include_once language(seccode); $len = strtoupper($charset) == GBK ? 2 : 3; $code = array(substr($seccode, 0, 3), substr($seccode, 3, 3)); $seccode = ‘‘; for($i = 0; $i < 2; $i++) { $seccode .= substr($lang[chn], $code[$i] * $len, $len); } return; } elseif($seccodedata[type] == 3) { $s = sprintf(%04s, base_convert($seccode, 10, 20)); $seccodeunits = CEFHKLMNOPQRSTUVWXYZ; } else { $s = sprintf(%04s, base_convert($seccode, 10, 24)); $seccodeunits = BCEFGHJKMPQRTVWXY2346789; } $seccode = ‘‘; for($i = 0; $i < 4; $i++) { $unit = ord($s{$i}); $seccode .= ($unit >= 0x30 && $unit <= 0x39) ? $seccodeunits[$unit - 0x30] : $seccodeunits[$unit - 0x57]; } } /** * 检查是否正确提交了表单 * @param $var 需要检查的变量 * @param $allowget 是否允许GET方式 * @param $seccodecheck 验证码检测是否开启 * @return 返回是否正确提交了表单 */ function submitcheck($var, $allowget = 0, $seccodecheck = 0, $secqaacheck = 0) { if(empty($GLOBALS[$var])) { return FALSE; } else { global $_SERVER, $seclevel, $seccode, $seccodedata, $seccodeverify, $secanswer, $_DCACHE, $_DCOOKIE, $timestamp, $discuz_uid; if($allowget || ($_SERVER[REQUEST_METHOD] == POST && $GLOBALS[formhash] == formhash() && (empty($_SERVER[HTTP_REFERER]) || preg_replace("/https?:\/\/([^\:\/]+).*/i", "\\1", $_SERVER[HTTP_REFERER]) == preg_replace("/([^\:]+).*/", "\\1", $_SERVER[HTTP_HOST])))) { if($seccodecheck) { if(!$seclevel) { $key = $seccodedata[type] != 3 ? ‘‘ : $_DCACHE[settings][authkey].date(Ymd); list($seccode, $expiration, $seccodeuid) = explode("\t", authcode($_DCOOKIE[secc], DECODE, $key)); if($seccodeuid != $discuz_uid || $timestamp - $expiration > 600) { showmessage(submit_seccode_invalid); } dsetcookie(secc, ‘‘, -86400 * 365); } else { $tmp = substr($seccode, 0, 1); } seccodeconvert($seccode); if(strtoupper($seccodeverify) != $seccode) { showmessage(submit_seccode_invalid); } $seclevel && $seccode = random(6, 1) + $tmp * 1000000; } if($secqaacheck) { if(!$seclevel) { list($seccode, $expiration, $seccodeuid) = explode("\t", authcode($_DCOOKIE[secq], DECODE)); if($seccodeuid != $discuz_uid || $timestamp - $expiration > 600) { showmessage(submit_secqaa_invalid); } dsetcookie(secq, ‘‘, -86400 * 365); } require_once DISCUZ_ROOT../forumdata/cache/cache_secqaa.php; if(md5($secanswer) != $_DCACHE[secqaa][substr($seccode, 0, 1)][answer]) { showmessage(submit_secqaa_invalid); } $seclevel && $seccode = random(1, 1) * 1000000 + substr($seccode, -6); } return TRUE; } else { showmessage(submit_invalid); } } } /** * 解析模板 * @return 返回域名 */ function template($file, $templateid = 0, $tpldir = ‘‘) { global $inajax; $file .= $inajax && ($file == header || $file == footer) ? _ajax : ‘‘; $tpldir = $tpldir ? $tpldir : TPLDIR; $templateid = $templateid ? $templateid : TEMPLATEID; $tplfile = DISCUZ_ROOT../.$tpldir./.$file..htm; $objfile = DISCUZ_ROOT../forumdata/templates/.$templateid._.$file..tpl.php; if($templateid != 1 && !file_exists($tplfile)) { $tplfile = DISCUZ_ROOT../templates/default/.$file..htm; } @checktplrefresh($tplfile, $tplfile, filemtime($objfile), $templateid, $tpldir); return $objfile; } /** * 如果cookie关闭使用GET方式传递sid * @param $url - 地址 * @param $tag - 标记 * @param $wml - 取得sid的input * @return 返回url */ function transsid($url, $tag = ‘‘, $wml = 0) { global $sid; $tag = stripslashes($tag); if(!$tag || (!preg_match("/^(http:\/\/|mailto:|#|javascript)/i", $url) && !strpos($url, sid=))) { if($pos = strpos($url, #)) { $urlret = substr($url, $pos); $url = substr($url, 0, $pos); } else { $urlret = ‘‘; } $url .= (strpos($url, ?) ? ($wml ? & : &) : ?).sid=.$sid.$urlret; } return $tag.$url; } /** * 显示主题分类 * @param $curtypeid - 当前被选择的类型id * @return 返回的HTML数据 */ function typeselect($curtypeid = 0, $special = ‘‘, $onchange = ‘‘, $modelid = 0) { global $fid, $sid, $extra; $onchange = $onchange ? $onchange : "onchange=\"ajaxget(‘post.php?action=threadtypes&typeid=‘+this.options[this.selectedIndex].value+‘&fid=$fid&sid=$sid‘, ‘threadtypes‘, ‘threadtypeswait‘)\""; if($threadtypes = $GLOBALS[forum][threadtypes]) { $selecthtml = ‘‘; foreach($threadtypes[types] as $typeid => $name) { if(!$special || $special == disabled || !$threadtypes[special][$typeid]) { $typehtml = <option value=".$typeid." .($curtypeid == $typeid ? selected="selected" : ‘‘). .($threadtypes[special][$typeid] ? class="special" : ‘‘).>.strip_tags($name).</option>; $selecthtml .= $modelid ? ($threadtypes[modelid][$typeid] == $modelid ? $typehtml : ‘‘) : $typehtml; } } $html = $selecthtml ? <select name="typeid" .(!$special ? $onchange : ‘‘).><option value="0"> </option>.$selecthtml.</select><span id="threadtypeswait"></span>.($special === disabled ? <input type="hidden" name="typeid" value=".$curtypeid." /> : ‘‘) : ‘‘; return $html; } else { return ‘‘; } } /** * 更新积分 * @param $uids - 用户id数组 * @param $creditsarray - 积分数组 * @param $coef - 积分 * @param $extrasql - 扩展SQL */ function updatecredits($uids, $creditsarray, $coef = 1, $extrasql = ‘‘) { if($uids && ((!empty($creditsarray) && is_array($creditsarray)) || $extrasql)) { global $db, $tablepre; $creditsadd = $comma = ‘‘; foreach($creditsarray as $id => $addcredits) { $creditsadd .= $comma.extcredits.$id.=extcredits.$id.+(.intval($addcredits).)*(.$coef.); $comma = , ; } if($creditsadd || $extrasql) { $db->query("UPDATE {$tablepre}members SET $creditsadd ".($creditsadd && $extrasql ? , : ‘‘)." $extrasql WHERE uid IN (‘$uids‘)", UNBUFFERED); } } } /** * 更新session */ function updatesession() { if(!empty($GLOBALS[sessionupdated])) { return TRUE; } global $db, $tablepre, $sessionexists, $sessionupdated, $sid, $onlineip, $discuz_uid, $discuz_user, $timestamp, $lastactivity, $seccode, $pvfrequence, $spageviews, $lastolupdate, $oltimespan, $onlinehold, $groupid, $styleid, $invisible, $discuz_action, $fid, $tid; $fid = intval($fid); $tid = intval($tid); if($oltimespan && $discuz_uid && $lastactivity && $timestamp - ($lastolupdate ? $lastolupdate : $lastactivity) > $oltimespan * 60) { $lastolupdate = $timestamp; $db->query("UPDATE {$tablepre}onlinetime SET total=total+‘$oltimespan‘, thismonth=thismonth+‘$oltimespan‘, lastupdate=‘$timestamp‘ WHERE uid=‘$discuz_uid‘ AND lastupdate<=‘".($timestamp - $oltimespan * 60).""); if(!$db->affected_rows()) { $db->query("INSERT INTO {$tablepre}onlinetime (uid, thismonth, total, lastupdate) VALUES ($discuz_uid, $oltimespan, $oltimespan, $timestamp)", ‘SILENT‘); } } else { $lastolupdate = intval($lastolupdate); } if($sessionexists == 1) { if($pvfrequence && $discuz_uid) { if($spageviews >= $pvfrequence) { $pageviewsadd = , pageviews=\‘0\‘; $db->query("UPDATE {$tablepre}members SET pageviews=pageviews+‘$spageviews‘ WHERE uid=‘$discuz_uid‘", UNBUFFERED); } else { $pageviewsadd = , pageviews=pageviews+1; } } else { $pageviewsadd = ‘‘; } $db->query("UPDATE {$tablepre}sessions SET uid=‘$discuz_uid‘, username=‘$discuz_user‘, groupid=‘$groupid‘, styleid=‘$styleid‘, invisible=‘$invisible‘, action=‘$discuz_action‘, lastactivity=‘$timestamp‘, lastolupdate=‘$lastolupdate‘, seccode=‘$seccode‘, fid=‘$fid‘, tid=‘$tid‘ $pageviewsadd WHERE sid=‘$sid‘"); } else { $ips = explode(., $onlineip); $db->query("DELETE FROM {$tablepre}sessions WHERE sid=‘$sid‘ OR lastactivity<($timestamp-$onlinehold) OR (‘$discuz_uid‘<>‘0‘ AND uid=‘$discuz_uid‘) OR (uid=‘0‘ AND ip1=‘$ips[0]‘ AND ip2=‘$ips[1]‘ AND ip3=‘$ips[2]‘ AND ip4=‘$ips[3]‘ AND lastactivity>$timestamp-60)"); $db->query("INSERT INTO {$tablepre}sessions (sid, ip1, ip2, ip3, ip4, uid, username, groupid, styleid, invisible, action, lastactivity, lastolupdate, seccode, fid, tid) VALUES ($sid, $ips[0], $ips[1], $ips[2], $ips[3], $discuz_uid, $discuz_user, $groupid, $styleid, $invisible, $discuz_action, $timestamp, $lastolupdate, $seccode, $fid, $tid)", ‘SILENT‘); if($discuz_uid && $timestamp - $lastactivity > 21600) { if($oltimespan && $timestamp - $lastactivity > 86400) { $query = $db->query("SELECT total FROM {$tablepre}onlinetime WHERE uid=‘$discuz_uid‘"); $oltimeadd = , oltime=.round(intval($db->result($query, 0)) / 60); } else { $oltimeadd = ‘‘; } $db->query("UPDATE {$tablepre}members SET lastip=‘$onlineip‘, lastvisit=lastactivity, lastactivity=‘$timestamp‘ $oltimeadd WHERE uid=‘$discuz_uid‘", UNBUFFERED); } } $sessionupdated = 1; } /** * 更新管理者状态 * @param $modacton - 动作 * @param $smcols - 执行次数 */ function updatemodworks($modaction, $posts = 1) { global $modworkstatus, $db, $tablepre, $discuz_uid, $timestamp, $_DCACHE; $today = gmdate(Y-m-d, $timestamp + $_DCACHE[settings][timeoffset] * 3600); if($modworkstatus && $modaction && $posts) { $db->query("UPDATE {$tablepre}modworks SET count=count+1, posts=posts+‘$posts‘ WHERE uid=‘$discuz_uid‘ AND modaction=‘$modaction‘ AND dateline=‘$today‘"); if(!$db->affected_rows()) { $db->query("INSERT INTO {$tablepre}modworks (uid, modaction, dateline, count, posts) VALUES (‘$discuz_uid‘, ‘$modaction‘, ‘$today‘, 1, ‘$posts‘)"); } } } /** * 写日志 * @param $path 日志名称 * @param $log 日志 */ function writelog($file, $log) { global $timestamp, $_DCACHE; $yearmonth = gmdate(Ym, $timestamp + $_DCACHE[settings][timeoffset] * 3600); $logdir = DISCUZ_ROOT../forumdata/logs/; $logfile = $logdir.$yearmonth._.$file..php; if(@filesize($logfile) > 2048000) { $dir = opendir($logdir); $length = strlen($file); $maxid = $id = 0; while($entry = readdir($dir)) { if(strexists($entry, $yearmonth._.$file)) { $id = intval(substr($entry, $length + 8, -4)); $id > $maxid && $maxid = $id; } } closedir($dir); $logfilebak = $logdir.$yearmonth._.$file._.($maxid + 1)..php; @rename($logfile, $logfilebak); } if($fp = @fopen($logfile, a)) { @flock($fp, 2); $log = is_array($log) ? $log : array($log); foreach($log as $tmp) { fwrite($fp, "<?PHP exit;?>\t".str_replace(array(<?, ?>), ‘‘, $tmp)."\n"); } fclose($fp); } } function wipespecial($str) { return str_replace(array( "\n", "\r", ..), array(‘‘, ‘‘, ‘‘), $str); } function discuz_uc_avatar($uid, $size = ‘‘) { return UC_API./avatar.php?uid=.$uid.&size=.$size; } ?>

 

Discuz!常用函数解析

标签:检测   rip   ecc   types   merge   input   time   arch   url   

原文地址:https://www.cnblogs.com/klmyoil/p/9190744.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!