您的位置:首页 > 编程语言 > PHP开发

Discuz常用函数解析

2014-02-25 15:10 666 查看
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;

}
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php menu 函数 discuz