[有过C语言开发经验的,一定对Source Insight不陌生,其强大的功能,为C开发提供了便利。最近做了点关于PHP的二次开发,由于系统架构的比较乱,文件之间层层嵌套,找一个方

/**

* [Chimicron-auto] (C)2014-2099 tntxia.

*

* $Id: class_core.php 2014-07-13 08:21:13Z tntxia $

*/

define('IN_CHIMICRON_AUTO', true);

error_reporting(0);

class chimicron_auto_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 chimicron_auto_core();

}

return $object;

}

function chimicron_auto_core() {

$this->_init_env();

$this->_init_config();

$this->_init_input();

$this->_init_output();

}

function init() {

if(!$this->initated) {

$this->_init_db();

}

$this->initated = true;

}

function _init_env() {

error_reporting(E_ERROR);

if(PHP_VERSION < '5.3.0') {

set_magic_quotes_runtime(0);

}

define('CHIMICRON_AUTO_ROOT', substr(dirname(__FILE__), 0, -12));

define('MAGIC_QUOTES_GPC', function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc());

define('ICONV_ENABLE', function_exists('iconv'));

define('MB_ENABLE', function_exists('mb_convert_encoding'));

define('EXT_OBGZIP', function_exists('ob_gzhandler'));

define('TIMESTAMP', time());

$this->timezone_set();

if(!defined('CHIMICRON_AUTO_CORE_FUNCTION') && !@include(CHIMICRON_AUTO_ROOT.'./source/function/function_core.php')) {

exit('function_core.php is missing');

}

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');

}

}

define('IS_ROBOT', checkrobot());

foreach ($GLOBALS as $key => $value) {

if (!isset($this->superglobal[$key])) {

$GLOBALS[$key] = null; unset($GLOBALS[$key]);

}

}

global $_G;

$_G = array(

'uid' => 0,

'username' => '',

'adminid' => 0,

'groupid' => 1,

'sid' => '',

'formhash' => '',

'timestamp' => TIMESTAMP,

'starttime' => dmicrotime(),

'clientip' => $this->_get_client_ip(),

'referer' => '',

'charset' => '',

'gzipcompress' => '',

'authkey' => '',

'timenow' => array(),

'PHP_SELF' => '',

'siteurl' => '',

'siteroot' => '',

'siteport' => '',

'config' => array(),

'setting' => array(),

'member' => array(),

'group' => array(),

'cookie' => array(),

'style' => array(),

'cache' => array(),

'session' => array(),

'lang' => array(),

'my_app' => array(),

'my_userapp' => array(),

'fid' => 0,

'tid' => 0,

'forum' => array(),

'thread' => array(),

'rssauth' => '',

'home' => array(),

'space' => array(),

'block' => array(),

'article' => array(),

'action' => array(

'action' => APPTYPEID,

'fid' => 0,

'tid' => 0,

),

'mobile' => '',

);

$_G['PHP_SELF'] = htmlspecialchars($this->_get_script_url());

$_G['basescript'] = CURSCRIPT;

$_G['basefilename'] = basename($_G['PHP_SELF']);

$sitepath = substr($_G['PHP_SELF'], 0, strrpos($_G['PHP_SELF'], '/'));

if(defined('IN_API')) {

$sitepath = preg_replace("/\/api\/?.*?$/i", '', $sitepath);

} elseif(defined('IN_ARCHIVER')) {

$sitepath = preg_replace("/\/archiver/i", '', $sitepath);

}

$_G['siteurl'] = htmlspecialchars('http://'.$_SERVER['HTTP_HOST'].$sitepath.'/');

$url = parse_url($_G['siteurl']);

$_G['siteroot'] = isset($url['path']) ? $url['path'] : '';

$_G['siteport'] = empty($_SERVER['SERVER_PORT']) || $_SERVER['SERVER_PORT'] == '80' ? '' : ':'.$_SERVER['SERVER_PORT'];

if(defined('SUB_DIR')) {

$_G['siteurl'] = str_replace(SUB_DIR, '/', $_G['siteurl']);

$_G['siteroot'] = str_replace(SUB_DIR, '/', $_G['siteroot']);

}

$this->var = & $_G;

}

function _get_script_url() {

if($this->var['PHP_SELF'] === null){

$scriptName = basename($_SERVER['SCRIPT_FILENAME']);

if(basename($_SERVER['SCRIPT_NAME']) === $scriptName) {

$this->var['PHP_SELF'] = $_SERVER['SCRIPT_NAME'];

} else if(basename($_SERVER['PHP_SELF']) === $scriptName) {

$this->var['PHP_SELF'] = $_SERVER['PHP_SELF'];

} else if(isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME']) === $scriptName) {

$this->var['PHP_SELF'] = $_SERVER['ORIG_SCRIPT_NAME'];

} else if(($pos = strpos($_SERVER['PHP_SELF'],'/'.$scriptName)) !== false) {

$this->var['PHP_SELF'] = substr($_SERVER['SCRIPT_NAME'],0,$pos).'/'.$scriptName;

} else if(isset($_SERVER['DOCUMENT_ROOT']) && strpos($_SERVER['SCRIPT_FILENAME'],$_SERVER['DOCUMENT_ROOT']) === 0) {

$this->var['PHP_SELF'] = str_replace('\\','/',str_replace($_SERVER['DOCUMENT_ROOT'],'',$_SERVER['SCRIPT_FILENAME']));

} else {

system_error('request_tainting');

}

}

return $this->var['PHP_SELF'];

}

function _init_input() {

if (isset($_GET['GLOBALS']) ||isset($_POST['GLOBALS']) || isset($_COOKIE['GLOBALS']) || isset($_FILES['GLOBALS'])) {

system_error('request_tainting');

}

if(!MAGIC_QUOTES_GPC) {

$_GET = daddslashes($_GET);

$_POST = daddslashes($_POST);

$_COOKIE = daddslashes($_COOKIE);

$_FILES = daddslashes($_FILES);

}

$prelength = strlen($this->config['cookie']['cookiepre']);

foreach($_COOKIE as $key => $val) {

if(substr($key, 0, $prelength) == $this->config['cookie']['cookiepre']) {

$this->var['cookie'][substr($key, $prelength)] = $val;

}

}

if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST)) {

$_GET = array_merge($_GET, $_POST);

}

if(isset($_GET['diy'])) {

$_GET['diy'] = empty($_GET['diy']) ? '' : $_GET['diy'];

}

foreach($_GET as $k => $v) {

$this->var['gp_'.$k] = $v;

}

$this->var['mod'] = empty($this->var['gp_mod']) ? '' : htmlspecialchars($this->var['gp_mod']);

$this->var['inajax'] = empty($this->var['gp_inajax']) ? 0 : (empty($this->var['config']['output']['ajaxvalidate']) ? 1 : ($_SERVER['REQUEST_METHOD'] == 'GET' && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' || $_SERVER['REQUEST_METHOD'] == 'POST' ? 1 : 0));

$this->var['page'] = empty($this->var['gp_page']) ? 1 : max(1, intval($this->var['gp_page']));

$this->var['sid'] = $this->var['cookie']['sid'] = isset($this->var['cookie']['sid']) ? htmlspecialchars($this->var['cookie']['sid']) : '';

$this->var['gp_handlekey'] = !empty($this->var['gp_handlekey']) && preg_match('/^\w+$/', $this->var['gp_handlekey']) ? $this->var['gp_handlekey'] : '';

}

function _init_config() {

$_config = array();

@include CHIMICRON_AUTO_ROOT.'./config/config_global.php';

if(empty($_config['security']['authkey'])) {

$_config['security']['authkey'] = md5($_config['cookie']['cookiepre'].$_config['db'][1]['dbname']);

}

if(empty($_config['debug']) || !file_exists(libfile('function/debug'))) {

define('DISCUZ_DEBUG', false);

} elseif($_config['debug'] === 1 || $_config['debug'] === 2 || !empty($_REQUEST['debug']) && $_REQUEST['debug'] === $_config['debug']) {

define('DISCUZ_DEBUG', true);

if($_config['debug'] == 2) {

error_reporting(E_ALL);

}

} else {

define('DISCUZ_DEBUG', false);

}

define('STATICURL', !empty($_config['output']['staticurl']) ? $_config['output']['staticurl'] : 'static/');

$this->var['staticurl'] = STATICURL;

$this->config = & $_config;

$this->var['config'] = & $_config;

if(substr($_config['cookie']['cookiepath'], 0, 1) != '/') {

$this->var['config']['cookie']['cookiepath'] = '/'.$this->var['config']['cookie']['cookiepath'];

}

$this->var['config']['cookie']['cookiepre'] = $this->var['config']['cookie']['cookiepre'].substr(md5($this->var['config']['cookie']['cookiepath'].'|'.$this->var['config']['cookie']['cookiedomain']), 0, 4).'_';

$this->var['authkey'] = md5($_config['security']['authkey'].$_SERVER['HTTP_USER_AGENT']);

}

function _init_output() {

setglobal('charset', $this->config['output']['charset']);

define('CHARSET', $this->config['output']['charset']);

if(strtolower(CHARSET)=='utf-8') { //vot

ini_set('mbstring.internal_encoding','UTF-8'); //vot

//echo 'mbstring.internal_encoding = ' . ini_get('mbstring.internal_encoding') . "
\n";

} //vot

if($this->config['security']['urlxssdefend'] && $_SERVER['REQUEST_METHOD'] == 'GET' && !empty($_SERVER['REQUEST_URI'])) {

$this->_xss_check();

}

if($this->config['security']['attackevasive'] && (!defined('CURSCRIPT') || !in_array($this->var['mod'], array('seccode', 'secqaa', 'swfupload')))) {

require_once libfile('misc/security', 'include');

}

if(!empty($_SERVER['HTTP_ACCEPT_ENCODING']) && strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') === false) {

$this->config['output']['gzip'] = false;

}

$allowgzip = $this->config['output']['gzip'] && empty($this->var['inajax']) && $this->var['mod'] != 'attachment' && EXT_OBGZIP;

setglobal('gzipcompress', $allowgzip);

ob_start($allowgzip ? 'ob_gzhandler' : null);

if($this->config['output']['forceheader']) {

@header('Content-Type: text/html; charset='.CHARSET);

}

}

function _xss_check() {

$temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));

if(strpos($temp, '

system_error('request_tainting');

}

return true;

}

function _get_client_ip() {

$ip = $_SERVER['REMOTE_ADDR'];

if (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {

$ip = $_SERVER['HTTP_CLIENT_IP'];

} elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) {

foreach ($matches[0] AS $xip) {

if (!preg_match('#^(10|172\.16|192\.168)\.#', $xip)) {

$ip = $xip;

break;

}

}

}

return $ip;

}

function _init_db() {

$class = 'db_mysql';

$this->db = & DB::object($class);

$this->db->set_config($this->config['db']);

$this->db->connect();

}

function _init_user() {

if($this->init_user) {

if($auth = getglobal('auth', 'cookie')) {

$auth = daddslashes(explode("\t", authcode($auth, 'DECODE')));

}

list($discuz_pw, $discuz_uid) = empty($auth) || count($auth) < 2 ? array('', '') : $auth;

if($discuz_uid) {

$user = getuserbyuid($discuz_uid);

}

if(!empty($user) && $user['password'] == $discuz_pw) {

$this->var['member'] = $user;

} else {

$user = array();

$this->_init_guest();

}

if($user && $user['groupexpiry'] > 0 && $user['groupexpiry'] < TIMESTAMP && getgpc('mod') != 'spacecp' && getgpc('do') != 'expiry' && CURSCRIPT != 'home') {

dheader('location: home.php?mod=spacecp&ac=usergroup&do=expiry');

}

$this->cachelist[] = 'usergroup_'.$this->var['member']['groupid'];

if($user && $user['adminid'] > 0 && $user['groupid'] != $user['adminid']) {

$this->cachelist[] = 'admingroup_'.$this->var['member']['adminid'];

}

} else {

$this->_init_guest();

}

if(empty($this->var['cookie']['lastvisit'])) {

$this->var['member']['lastvisit'] = TIMESTAMP - 3600;

dsetcookie('lastvisit', TIMESTAMP - 3600, 86400 * 30);

} else {

$this->var['member']['lastvisit'] = $this->var['cookie']['lastvisit'];

}

setglobal('uid', getglobal('uid', 'member'));

setglobal('username', addslashes(getglobal('username', 'member')));

setglobal('adminid', getglobal('adminid', 'member'));

setglobal('groupid', getglobal('groupid', 'member'));

}

function _init_guest() {

setglobal('member', array( 'uid' => 0, 'username' => '', 'adminid' => 0, 'groupid' => 7, 'credits' => 0, 'timeoffset' => 9999));

}

function _init_cron() {

$ext = empty($this->config['remote']['on']) || empty($this->config['remote']['cron']) || APPTYPEID == 200;

if($this->init_cron && $this->init_setting && $ext) {

if($this->var['cache']['cronnextrun'] <= TIMESTAMP) {

require_once libfile('class/cron');

discuz_cron::run();

}

}

}

function _init_setting() {

if($this->init_setting) {

if(empty($this->var['setting'])) {

$this->cachelist[] = 'setting';

}

if(empty($this->var['style'])) {

$this->cachelist[] = 'style_default';

}

if(!isset($this->var['cache']['cronnextrun'])) {

$this->cachelist[] = 'cronnextrun';

}

}

!empty($this->cachelist) && loadcache($this->cachelist);

if(!is_array($this->var['setting'])) {

$this->var['setting'] = array();

}

if($this->var['member'] && $this->var['group']['radminid'] == 0 && $this->var['member']['adminid'] > 0 && $this->var['member']['groupid'] != $this->var['member']['adminid'] && !empty($this->var['cache']['admingroup_'.$this->var['member']['adminid']])) {

$this->var['group'] = array_merge($this->var['group'], $this->var['cache']['admingroup_'.$this->var['member']['adminid']]);

}

}

function _init_style() {

$styleid = !empty($this->var['cookie']['styleid']) ? $this->var['cookie']['styleid'] : 0;

if(intval(!empty($this->var['forum']['styleid']))) {

$this->var['cache']['style_default']['styleid'] = $styleid = $this->var['forum']['styleid'];

} elseif(intval(!empty($this->var['category']['styleid']))) {

$this->var['cache']['style_default']['styleid'] = $styleid = $this->var['category']['styleid'];

}

$styleid = intval($styleid);

if($styleid && $styleid != $this->var['setting']['styleid']) {

loadcache('style_'.$styleid);

if($this->var['cache']['style_'.$styleid]) {

$this->var['style'] = $this->var['cache']['style_'.$styleid];

}

}

define('IMGDIR', $this->var['style']['imgdir']);

define('STYLEID', $this->var['style']['styleid']);

define('VERHASH', $this->var['style']['verhash']);

define('TPLDIR', $this->var['style']['tpldir']);

define('TEMPLATEID', $this->var['style']['templateid']);

}

function _init_memory() {

$this->mem = new discuz_memory();

if($this->init_memory) {

$this->mem->init($this->config['memory']);

}

$this->var['memory'] = $this->mem->type;

}

function _init_mobile() {

if(!$this->var['setting'] || !$this->init_mobile || !$this->var['setting']['mobile']['allowmobile'] || !is_array($this->var['setting']['mobile']) || IS_ROBOT) {

$nomobile = true;

$unallowmobile = true;

}

if($_GET['mobile'] === 'no') {

dsetcookie('mobile', 'no', 3600);

$nomobile = true;

} elseif($this->var['cookie']['mobile'] == 'no' && $_GET['mobile'] === 'yes') {

dsetcookie('mobile', '');

} elseif($this->var['cookie']['mobile'] == 'no') {

$nomobile = true;

}

if(!checkmobile()) {

$nomobile = true;

}

if($this->var['setting']['mobile']['mobilepreview'] && !$this->var['mobile'] && !$unallowmobile) {

if($_GET['mobile'] === 'yes') {

dheader("Location:misc.php?mod=mobile");

}

}

if($nomobile || (!$this->var['setting']['mobile']['mobileforward'] && $_GET['mobile'] !== 'yes')) {

if($_SERVER['HTTP_HOST'] == $this->var['setting']['domain']['app']['mobile'] && $this->var['setting']['domain']['app']['default']) {

dheader("Location:http://".$this->var['setting']['domain']['app']['default'].$_SERVER['REQUEST_URI']);

} else {

return;

}

}

if(strpos($this->var['setting']['domain']['defaultindex'], CURSCRIPT) !== false && CURSCRIPT != 'forum' && !$_GET['mod']) {

if($this->var['setting']['domain']['app']['mobile']) {

$mobileurl = 'http://'.$this->var['setting']['domain']['app']['mobile'];

} else {

if($this->var['setting']['domain']['app']['forum']) {

$mobileurl = 'http://'.$this->var['setting']['domain']['app']['forum'].'?mobile=yes';

} else {

$mobileurl = $this->var['siteurl'].'forum.php?mobile=yes';

}

}

dheader("location:$mobileurl");

}

define('IN_MOBILE', true);

setglobal('gzipcompress', 0);

$arr = array(strstr($_SERVER['QUERY_STRING'], '&simpletype'), strstr($_SERVER['QUERY_STRING'], 'simpletype'), '&mobile=yes', 'mobile=yes');

$query_sting_tmp = str_replace($arr, '', $_SERVER['QUERY_STRING']);

$this->var['setting']['mobile']['nomobileurl'] = ($this->var['setting']['domain']['app']['forum'] ? 'http://'.$this->var['setting']['domain']['app']['forum'].'/' : $this->var['siteurl']).$this->var['basefilename'].($query_sting_tmp ? '?'.$query_sting_tmp.'&' : '?').'mobile=no';

$this->var['setting']['lazyload'] = 0;

if('utf-8' != CHARSET) {

if(strtolower($_SERVER['REQUEST_METHOD']) === 'post') {

foreach($_POST AS $pk => $pv) {

if(!is_numeric($pv)) {

$this->var['gp_'.$pk] = $_GET[$pk] = $_POST[$pk] = $this->mobile_iconv_recurrence($pv);

}

}

}

}

if($_GET['simpletype']) {

if($_GET['simpletype'] == 'yes') {

$this->var['setting']['mobile']['mobilesimpletype'] = 1;

dsetcookie('simpletype', 1, 86400);

} else {

$this->var['setting']['mobile']['mobilesimpletype'] = 0;

dsetcookie('simpletype', 0, 86400);

}

} elseif($this->var['cookie']['simpletype']) {

$this->var['setting']['mobile']['mobilesimpletype'] = $this->var['cookie']['simpletype'] == 1 ? 1 : 0 ;

}

if(!$this->var['setting']['mobile']['mobilesimpletype']) {

$this->var['setting']['imagemaxwidth'] = 224;

}

$this->var['setting']['regstatus'] = $this->var['setting']['mobile']['mobileregister'] ? $this->var['setting']['regstatus'] : 0 ;

if(!$this->var['setting']['mobile']['mobileseccode']) {

$this->var['setting']['seccodestatus'] = 0;

}

$this->var['setting']['seccodedata']['type'] = 99;

$this->var['setting']['thumbquality'] = 50;

$this->var['setting']['mobile']['simpletypeurl'] = array();

$this->var['setting']['mobile']['simpletypeurl'][0] = $this->var['siteurl'].$this->var['basefilename'].($query_sting_tmp ? '?'.$query_sting_tmp.'&' : '?').'mobile=yes&simpletype=no';

$this->var['setting']['mobile']['simpletypeurl'][1] = $this->var['siteurl'].$this->var['basefilename'].($query_sting_tmp ? '?'.$query_sting_tmp.'&' : '?').'mobile=yes&simpletype=yes';

unset($query_sting_tmp);

ob_start();

}

function timezone_set($timeoffset = 0) {

if(function_exists('date_default_timezone_set')) {

@date_default_timezone_set('Etc/GMT'.($timeoffset > 0 ? '-' : '+').(abs($timeoffset)));

}

}

function mobile_iconv_recurrence($value) {

if(is_array($value)) {

foreach($value AS $key => $val) {

$value[$key] = $this->mobile_iconv_recurrence($val);

}

} else {

$value = addslashes(diconv(stripslashes($value), 'utf-8', CHARSET));

}

return $value;

}

}

class db_mysql

{

var $tablepre;

var $version = '';

var $querynum = 0;

var $slaveid = 0;

var $curlink;

var $link = array();

var $config = array();

var $sqldebug = array();

var $map = array();

function db_mysql($config = array()) {

if(!empty($config)) {

$this->set_config($config);

}

}

function set_config($config) {

$this->config = &$config;

$this->tablepre = $config['1']['tablepre'];

if(!empty($this->config['map'])) {

$this->map = $this->config['map'];

}

}

function connect($serverid = 1) {

if(empty($this->config) || empty($this->config[$serverid])) {

$this->halt('config_db_not_found');

}

$this->link[$serverid] = $this->_dbconnect(

$this->config[$serverid]['dbhost'],

$this->config[$serverid]['dbuser'],

$this->config[$serverid]['dbpw'],

$this->config[$serverid]['dbcharset'],

$this->config[$serverid]['dbname'],

$this->config[$serverid]['pconnect']

);

$this->curlink = $this->link[$serverid];

}

function _dbconnect($dbhost, $dbuser, $dbpw, $dbcharset, $dbname, $pconnect) {

$link = null;

$func = empty($pconnect) ? 'mysql_connect' : 'mysql_pconnect';

if(!$link = @$func($dbhost, $dbuser, $dbpw, 1)) {

$this->halt('notconnect');

} else {

$this->curlink = $link;

if($this->version() > '4.1') {

$dbcharset = $dbcharset ? $dbcharset : $this->config[1]['dbcharset'];

$serverset = $dbcharset ? 'character_set_connection='.$dbcharset.', character_set_results='.$dbcharset.', character_set_client=binary' : '';

$serverset .= $this->version() > '5.0.1' ? ((empty($serverset) ? '' : ',').'sql_mode=\'\'') : '';

$serverset && mysql_query("SET $serverset", $link);

}

$dbname && @mysql_select_db($dbname, $link);

}

return $link;

}

function table_name($tablename) {

if(!empty($this->map) && !empty($this->map[$tablename])) {

$id = $this->map[$tablename];

if(!$this->link[$id]) {

$this->connect($id);

}

$this->curlink = $this->link[$id];

} else {

$this->curlink = $this->link[1];

}

return $this->tablepre.$tablename;

}

function select_db($dbname) {

return mysql_select_db($dbname, $this->curlink);

}

function fetch_array($query, $result_type = MYSQL_ASSOC) {

return mysql_fetch_array($query, $result_type);

}

function fetch_first($sql) {

return $this->fetch_array($this->query($sql));

}

function result_first($sql) {

return $this->result($this->query($sql), 0);

}

function query($sql, $type = '') {

if(defined('DISCUZ_DEBUG') && DISCUZ_DEBUG) {

$starttime = dmicrotime();

}

$func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ?

'mysql_unbuffered_query' : 'mysql_query';

if(!($query = $func($sql, $this->curlink))) {

if(in_array($this->errno(), array(2006, 2013)) && substr($type, 0, 5) != 'RETRY') {

$this->connect();

return $this->query($sql, 'RETRY'.$type);

}

if($type != 'SILENT' && substr($type, 5) != 'SILENT') {

$this->halt('query_error', $sql);

}

}

if(defined('DISCUZ_DEBUG') && DISCUZ_DEBUG) {

$this->sqldebug[] = array($sql, number_format((dmicrotime() - $starttime), 6), debug_backtrace());

}

$this->querynum++;

return $query;

}

function affected_rows() {

return mysql_affected_rows($this->curlink);

}

function error() {

return (($this->curlink) ? mysql_error($this->curlink) : mysql_error());

}

function errno() {

return intval(($this->curlink) ? mysql_errno($this->curlink) : mysql_errno());

}

function result($query, $row = 0) {

$query = @mysql_result($query, $row);

return $query;

}

function num_rows($query) {

$query = mysql_num_rows($query);

return $query;

}

function num_fields($query) {

return mysql_num_fields($query);

}

function free_result($query) {

return mysql_free_result($query);

}

function insert_id() {

return ($id = mysql_insert_id($this->curlink)) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0);

}

function fetch_row($query) {

$query = mysql_fetch_row($query);

return $query;

}

function fetch_fields($query) {

return mysql_fetch_field($query);

}

function version() {

if(empty($this->version)) {

$this->version = mysql_get_server_info($this->curlink);

}

return $this->version;

}

function close() {

return mysql_close($this->curlink);

}

function halt($message = '', $sql = '') {

require_once libfile('class/error');

discuz_error::db_error($message, $sql);

}

}

class DB

{

function table($table) {

return DB::_execute('table_name', $table);

}

function delete($table, $condition, $limit = 0, $unbuffered = true) {

if(empty($condition)) {

$where = '1';

} elseif(is_array($condition)) {

$where = DB::implode_field_value($condition, ' AND ');

} else {

$where = $condition;

}

$sql = "DELETE FROM ".DB::table($table)." WHERE $where ".($limit ? "LIMIT $limit" : '');

return DB::query($sql, ($unbuffered ? 'UNBUFFERED' : ''));

}

function insert($table, $data, $return_insert_id = false, $replace = false, $silent = false) {

$sql = DB::implode_field_value($data);

$cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';

$table = DB::table($table);

$silent = $silent ? 'SILENT' : '';

$return = DB::query("$cmd $table SET $sql", $silent);

return $return_insert_id ? DB::insert_id() : $return;

}

function update($table, $data, $condition, $unbuffered = false, $low_priority = false) {

$sql = DB::implode_field_value($data);

$cmd = "UPDATE ".($low_priority ? 'LOW_PRIORITY' : '');

$table = DB::table($table);

$where = '';

if(empty($condition)) {

$where = '1';

} elseif(is_array($condition)) {

$where = DB::implode_field_value($condition, ' AND ');

} else {

$where = $condition;

}

$res = DB::query("$cmd $table SET $sql WHERE $where", $unbuffered ? 'UNBUFFERED' : '');

return $res;

}

function implode_field_value($array, $glue = ',') {

$sql = $comma = '';

foreach ($array as $k => $v) {

$sql .= $comma."`$k`='$v'";

$comma = $glue;

}

return $sql;

}

function insert_id() {

return DB::_execute('insert_id');

}

function fetch($resourceid, $type = MYSQL_ASSOC) {

return DB::_execute('fetch_array', $resourceid, $type);

}

function fetch_first($sql) {

DB::checkquery($sql);

return DB::_execute('fetch_first', $sql);

}

function result($resourceid, $row = 0) {

return DB::_execute('result', $resourceid, $row);

}

function result_first($sql) {

DB::checkquery($sql);

return DB::_execute('result_first', $sql);

}

function query($sql, $type = '') {

DB::checkquery($sql);

return DB::_execute('query', $sql, $type);

}

function num_rows($resourceid) {

return DB::_execute('num_rows', $resourceid);

}

function affected_rows() {

return DB::_execute('affected_rows');

}

function free_result($query) {

return DB::_execute('free_result', $query);

}

function error() {

return DB::_execute('error');

}

function errno() {

return DB::_execute('errno');

}

function _execute($cmd , $arg1 = '', $arg2 = '') {

static $db;

if(empty($db)) $db = & DB::object();

$res = $db->$cmd($arg1, $arg2);

return $res;

}

function &object($dbclass = 'db_mysql') {

static $db;

if(empty($db)) $db = new $dbclass();

return $db;

}

function checkquery($sql) {

static $status = null, $checkcmd = array('SELECT', 'UPDATE', 'INSERT', 'REPLACE', 'DELETE');

if($status === null) $status = getglobal('config/security/querysafe/status');

if($status) {

$cmd = trim(strtoupper(substr($sql, 0, strpos($sql, ' '))));

if(in_array($cmd, $checkcmd)) {

$test = DB::_do_query_safe($sql);

if($test < 1) DB::_execute('halt', 'security_error', $sql);

}

}

return true;

}

function _do_query_safe($sql) {

static $_CONFIG = null;

if($_CONFIG === null) {

$_CONFIG = getglobal('config/security/querysafe');

}

$sql = str_replace(array('\\\\', '\\\'', '\\"', '\'\''), '', $sql);

$mark = $clean = '';

if(strpos($sql, '/') === false && strpos($sql, '#') === false && strpos($sql, '-- ') === false) {

$clean = preg_replace("/'(.+?)'/s", '', $sql);

} else {

$len = strlen($sql);

$mark = $clean = '';

for ($i = 0; $i

$str = $sql[$i];

switch ($str) {

case '\'':

if(!$mark) {

$mark = '\'';

$clean .= $str;

} elseif ($mark == '\'') {

$mark = '';

}

break;

case '/':

if(empty($mark) && $sql[$i+1] == '*') {

$mark = '/*';

$clean .= $mark;

$i++;

} elseif($mark == '/*' && $sql[$i -1] == '*') {

$mark = '';

$clean .= '*';

}

break;

case '#':

if(empty($mark)) {

$mark = $str;

$clean .= $str;

}

break;

case "\n":

if($mark == '#' || $mark == '--') {

$mark = '';

}

break;

case '-':

if(empty($mark)&& substr($sql, $i, 3) == '-- ') {

$mark = '-- ';

$clean .= $mark;

}

break;

default:

break;

}

$clean .= $mark ? '' : $str;

}

}

$clean = preg_replace("/[^a-z0-9_\-\(\)#\*\/\"]+/is", "", strtolower($clean));

if($_CONFIG['afullnote']) {

$clean = str_replace('/**/','',$clean);

}

if(is_array($_CONFIG['dfunction'])) {

foreach($_CONFIG['dfunction'] as $fun) {

if(strpos($clean, $fun.'(') !== false) return '-1';

}

}

if(is_array($_CONFIG['daction'])) {

foreach($_CONFIG['daction'] as $action) {

if(strpos($clean,$action) !== false) return '-3';

}

}

if($_CONFIG['dlikehex'] && strpos($clean, 'like0x')) {

return '-2';

}

if(is_array($_CONFIG['dnote'])) {

foreach($_CONFIG['dnote'] as $note) {

if(strpos($clean,$note) !== false) return '-4';

}

}

return 1;

}

}

class chimicron_auto_session {

var $sid = null;

var $var;

var $isnew = false;

var $newguest = array('sid' => 0, 'ip1' => 0, 'ip2' => 0, 'ip3' => 0, 'ip4' => 0,

'uid' => 0, 'username' => '', 'groupid' => 7, 'invisible' => 0, 'action' => 0,

'lastactivity' => 0, 'fid' => 0, 'tid' => 0, 'lastolupdate' => 0);

var $old = array('sid' => '', 'ip' => '', 'uid' => 0);

function chimicron_auto_session($sid = '', $ip = '', $uid = 0) {

$this->old = array('sid' => $sid, 'ip' => $ip, 'uid' => $uid);

$this->var = $this->newguest;

if(!empty($ip)) {

$this->init($sid, $ip, $uid);

}

}

function set($key, $value) {

if(isset($this->newguest[$key])) {

$this->var[$key] = $value;

} elseif ($key == 'ip') {

$ips = explode('.', $value);

$this->set('ip1', $ips[0]);

$this->set('ip2', $ips[1]);

$this->set('ip3', $ips[2]);

$this->set('ip4', $ips[3]);

}

}

function get($key) {

if(isset($this->newguest[$key])) {

return $this->var[$key];

} elseif ($key == 'ip') {

return $this->get('ip1').'.'.$this->get('ip2').'.'.$this->get('ip3').'.'.$this->get('ip4');

}

}

function init($sid, $ip, $uid) {

$this->old = array('sid' => $sid, 'ip' => $ip, 'uid' => $uid);

$session = array();

if($sid) {

$session = DB::fetch_first("SELECT * FROM ".DB::table('common_session').

" WHERE sid='$sid' AND CONCAT_WS('.', ip1,ip2,ip3,ip4)='$ip'");

}

if(empty($session) || $session['uid'] != $uid) {

$session = $this->create($ip, $uid);

}

$this->var = $session;

$this->sid = $session['sid'];

}

function create($ip, $uid) {

$this->isnew = true;

$this->var = $this->newguest;

$this->set('sid', random(6));

$this->set('uid', $uid);

$this->set('ip', $ip);

$uid && $this->set('invisible', getuserprofile('invisible'));

$this->set('lastactivity', time());

$this->sid = $this->var['sid'];

return $this->var;

}

function delete() {

global $_G;

$onlinehold = $_G['setting']['onlinehold'];

$guestspan = 60;

$onlinehold = time() - $onlinehold;

$guestspan = time() - $guestspan;

$condition = " sid='{$this->sid}' ";

$condition .= " OR lastactivity

$condition .= " OR (uid='0' AND ip1='{$this->var['ip1']}' AND ip2='{$this->var['ip2']}' AND ip3='{$this->var['ip3']}' AND ip4='{$this->var['ip4']}' AND lastactivity>$guestspan) ";

$condition .= $this->var['uid'] ? " OR (uid='{$this->var['uid']}') " : '';

DB::delete('common_session', $condition);

}

function update() {

global $_G;

if($this->sid !== null) {

$data = daddslashes($this->var);

if($this->isnew) {

$this->delete();

DB::insert('common_session', $data, false, false, true);

} else {

DB::update('common_session', $data, "sid='$data[sid]'");

}

$_G['session'] = $data;

dsetcookie('sid', $this->sid, 86400);

}

}

function onlinecount($type = 0) {

$condition = $type == 1 ? ' WHERE uid>0 ' : ($type == 2 ? ' WHERE invisible=1 ' : '');

return DB::result_first("SELECT count(*) FROM ".DB::table('common_session').$condition);

}

}

class discuz_process

{

function islocked($process, $ttl = 0) {

$ttl = $ttl < 1 ? 600 : intval($ttl);

if(discuz_process::_status('get', $process)) {

return true;

} else {

return discuz_process::_find($process, $ttl);

}

}

function unlock($process) {

discuz_process::_status('rm', $process);

discuz_process::_cmd('rm', $process);

}

function _status($action, $process) {

static $plist = array();

switch ($action) {

case 'set' : $plist[$process] = true; break;

case 'get' : return !empty($plist[$process]); break;

case 'rm' : $plist[$process] = null; break;

case 'clear' : $plist = array(); break;

}

return true;

}

function _find($name, $ttl) {

if(!discuz_process::_cmd('get', $name)) {

discuz_process::_cmd('set', $name, $ttl);

$ret = false;

} else {

$ret = true;

}

discuz_process::_status('set', $name);

return $ret;

}

function _cmd($cmd, $name, $ttl = 0) {

static $allowmem;

if($allowmem === null) {

$allowmem = memory('check') == 'memcache';

}

if($allowmem) {

return discuz_process::_process_cmd_memory($cmd, $name, $ttl);

} else {

return discuz_process::_process_cmd_db($cmd, $name, $ttl);

}

}

function _process_cmd_memory($cmd, $name, $ttl = 0) {

return memory($cmd, 'process_lock_'.$name, time(), $ttl);

}

function _process_cmd_db($cmd, $name, $ttl = 0) {

$ret = '';

switch ($cmd) {

case 'set':

$ret = DB::insert('common_process', array('processid' => $name, 'expiry' => time() + $ttl), false, true);

break;

case 'get':

$ret = DB::fetch_first("SELECT * FROM ".DB::table('common_process')." WHERE processid='$name'");

if(empty($ret) || $ret['expiry'] < time()) {

$ret = false;

} else {

$ret = true;

}

break;

case 'rm':

$ret = DB::delete('common_process', "processid='$name' OR expiry

break;

}

return $ret;

}

}

class discuz_memory

{

var $config;

var $extension = array();

var $memory;

var $prefix;

var $type;

var $keys;

var $enable = false;

function discuz_memory() {

$this->extension['eaccelerator'] = function_exists('eaccelerator_get');

$this->extension['apc'] = function_exists('apc_fetch');

$this->extension['xcache'] = function_exists('xcache_get');

$this->extension['memcache'] = extension_loaded('memcache');

}

function init($config) {

$this->config = $config;

$this->prefix = empty($config['prefix']) ? substr(md5($_SERVER['HTTP_HOST']), 0, 6).'_' : $config['prefix'];

$this->keys = array();

if($this->extension['memcache'] && !empty($config['memcache']['server'])) {

require_once libfile('class/memcache');

$this->memory = new discuz_memcache();

$this->memory->init($this->config['memcache']);

if(!$this->memory->enable) {

$this->memory = null;

}

}

if(!is_object($this->memory) && $this->extension['eaccelerator'] && $this->config['eaccelerator']) {

require_once libfile('class/eaccelerator');

$this->memory = new discuz_eaccelerator();

$this->memory->init(null);

}

if(!is_object($this->memory) && $this->extension['xcache'] && $this->config['xcache']) {

require_once libfile('class/xcache');

$this->memory = new discuz_xcache();

$this->memory->init(null);

}

if(!is_object($this->memory) && $this->extension['apc'] && $this->config['apc']) {

require_once libfile('class/apc');

$this->memory = new discuz_apc();

$this->memory->init(null);

}

if(is_object($this->memory)) {

$this->enable = true;

$this->type = str_replace('discuz_', '', get_class($this->memory));

$this->keys = $this->get('memory_system_keys');

$this->keys = !is_array($this->keys) ? array() : $this->keys;

}

}

function get($key) {

$ret = null;

if($this->enable) {

$ret = $this->memory->get($this->_key($key));

if(!is_array($ret)) {

$ret = null;

if(array_key_exists($key, $this->keys)) {

unset($this->keys[$key]);

$this->memory->set($this->_key('memory_system_keys'), array($this->keys));

}

} else {

return $ret[0];

}

}

return $ret;

}

function set($key, $value, $ttl = 0) {

$ret = null;

if($this->enable) {

$ret = $this->memory->set($this->_key($key), array($value), $ttl);

if($ret) {

$this->keys[$key] = true;

$this->memory->set($this->_key('memory_system_keys'), array($this->keys));

}

}

return $ret;

}

function rm($key) {

$ret = null;

if($this->enable) {

$ret = $this->memory->rm($this->_key($key));

unset($this->keys[$key]);

$this->memory->set($this->_key('memory_system_keys'), array($this->keys));

}

return $ret;

}

function clear() {

if($this->enable && is_array($this->keys)) {

if(method_exists($this->memory, 'clear')) {

$this->memory->clear();

} else {

$this->keys['memory_system_keys'] = true;

foreach ($this->keys as $k => $v) {

$this->memory->rm($this->_key($k));

}

}

}

$this->keys = array();

return true;

}

function _key($str) {

return ($this->prefix).$str;

}

}

?>

[虽然PHP是世界上最好的语言,但是也有一些因为弱类型语言的安全性问题出现。WordPress历史上就出现过由于PHP本身的缺陷而造成的一些安全性问题,如 CVE-2014-0166 中的cook

/**

* [Discuz!] (C)2001-2099 Comsenz Inc.

* This is NOT a freeware, use is subject to license terms

*

* $Id: function_core.php 23920 2011-08-16 09:11:43Z cnteacher $

*English by Valery Votintsev at sources.ru

*/

if(!defined('IN_CHIMICRON_AUTO')) {

exit('Access Denied');

}

define('CHIMICRON_AUTO_CORE_FUNCTION', true);

function system_error($message, $show = true, $save = true, $halt = true) {

require_once libfile('class/error');

discuz_error::system_error($message, $show, $save, $halt);

}

function updatesession($force = false) {

global $_G;

static $updated = false;

if(!$updated) {

if($_G['uid']) {

if($_G['cookie']['ulastactivity']) {

$ulastactivity = authcode($_G['cookie']['ulastactivity'], 'DECODE');

} else {

$ulastactivity = getuserprofile('lastactivity');

dsetcookie('ulastactivity', authcode($ulastactivity, 'ENCODE'), 31536000);

}

}

$discuz = & chimiron_auto_core::instance();

$oltimespan = $_G['setting']['oltimespan'];

$lastolupdate = $discuz->session->var['lastolupdate'];

if($_G['uid'] && $oltimespan && TIMESTAMP - ($lastolupdate ? $lastolupdate : $ulastactivity) > $oltimespan * 60) {

DB::query("UPDATE ".DB::table('common_onlinetime')."

SET total=total+'$oltimespan', thismonth=thismonth+'$oltimespan', lastupdate='" . TIMESTAMP . "'

WHERE uid='{$_G['uid']}'");

if(!DB::affected_rows()) {

DB::insert('common_onlinetime', array(

'uid' => $_G['uid'],

'thismonth' => $oltimespan,

'total' => $oltimespan,

'lastupdate' => TIMESTAMP,

));

}

$discuz->session->set('lastolupdate', TIMESTAMP);

}

foreach($discuz->session->var as $k => $v) {

if(isset($_G['member'][$k]) && $k != 'lastactivity') {

$discuz->session->set($k, $_G['member'][$k]);

}

}

foreach($_G['action'] as $k => $v) {

$discuz->session->set($k, $v);

}

$discuz->session->update();

$updated = true;

if($_G['uid'] && TIMESTAMP - $ulastactivity > 21600) {

if($oltimespan && TIMESTAMP - $ulastactivity > 43200) {

$total = DB::result_first("SELECT total FROM ".DB::table('common_onlinetime')." WHERE uid='$_G[uid]'");

DB::update('common_member_count', array('oltime' => round(intval($total) / 60)), "uid='$_G[uid]'", 1);

}

dsetcookie('ulastactivity', authcode(TIMESTAMP, 'ENCODE'), 31536000);

DB::update('common_member_status', array('lastip' => $_G['clientip'], 'lastactivity' => TIMESTAMP, 'lastvisit' => TIMESTAMP), "uid='$_G[uid]'", 1);

}

}

return $updated;

}

function dmicrotime() {

return array_sum(explode(' ', microtime()));

}

function setglobal($key , $value, $group = null) {

global $_G;

$k = explode('/', $group === null ? $key : $group.'/'.$key);

switch (count($k)) {

case 1: $_G[$k[0]] = $value; break;

case 2: $_G[$k[0]][$k[1]] = $value; break;

case 3: $_G[$k[0]][$k[1]][$k[2]] = $value; break;

case 4: $_G[$k[0]][$k[1]][$k[2]][$k[3]] = $value; break;

case 5: $_G[$k[0]][$k[1]][$k[2]][$k[3]][$k[4]] =$value; break;

}

return true;

}

function getglobal($key, $group = null) {

global $_G;

$k = explode('/', $group === null ? $key : $group.'/'.$key);

switch (count($k)) {

case 1: return isset($_G[$k[0]]) ? $_G[$k[0]] : null; break;

case 2: return isset($_G[$k[0]][$k[1]]) ? $_G[$k[0]][$k[1]] : null; break;

case 3: return isset($_G[$k[0]][$k[1]][$k[2]]) ? $_G[$k[0]][$k[1]][$k[2]] : null; break;

case 4: return isset($_G[$k[0]][$k[1]][$k[2]][$k[3]]) ? $_G[$k[0]][$k[1]][$k[2]][$k[3]] : null; break;

case 5: return isset($_G[$k[0]][$k[1]][$k[2]][$k[3]][$k[4]]) ? $_G[$k[0]][$k[1]][$k[2]][$k[3]][$k[4]] : null; break;

}

return null;

}

function getgpc($k, $type='GP') {

$type = strtoupper($type);

switch($type) {

case 'G': $var = &$_GET; break;

case 'P': $var = &$_POST; break;

case 'C': $var = &$_COOKIE; break;

default:

if(isset($_GET[$k])) {

$var = &$_GET;

} else {

$var = &$_POST;

}

break;

}

return isset($var[$k]) ? $var[$k] : NULL;

}

function getuserbyuid($uid) {

static $users = array();

if(empty($users[$uid])) {

$users[$uid] = DB::fetch_first("SELECT * FROM ".DB::table('common_member')." WHERE uid='$uid'");

}

return $users[$uid];

}

function getuserprofile($field) {

global $_G;

if(isset($_G['member'][$field])) {

return $_G['member'][$field];

}

static $tablefields = array(

'count'=> array('extcredits1','extcredits2','extcredits3','extcredits4','extcredits5','extcredits6','extcredits7','extcredits8','friends','posts','threads','digestposts','doings','blogs','albums','sharings','attachsize','views','oltime','todayattachs','todayattachsize'),

'status'=> array('regip','lastip','lastvisit','lastactivity','lastpost','lastsendmail','invisible','buyercredit','sellercredit','favtimes','sharetimes','profileprogress'),

'field_forum'=> array('publishfeed','customshow','customstatus','medals','sightml','groupterms','authstr','groups','attentiongroup'),

'field_home'=> array('videophoto','spacename','spacedescription','domain','addsize','addfriend','menunum','theme','spacecss','blockposition','recentnote','spacenote','privacy','feedfriend','acceptemail','magicgift','stickblogs'),

'profile'=> array('realname','gender','birthyear','birthmonth','birthday','constellation','zodiac','telephone','mobile','idcardtype','idcard','address','zipcode','nationality','birthprovince','birthcity','resideprovince','residecity','residedist','residecommunity','residesuite','graduateschool','company','education','occupation','position','revenue','affectivestatus','lookingfor','bloodtype','height','weight','alipay','icq','qq','yahoo','msn','taobao','site','bio','interest','field1','field2','field3','field4','field5','field6','field7','field8'),

'verify'=> array('verify1', 'verify2', 'verify3', 'verify4', 'verify5', 'verify6', 'verify7'),

);

$profiletable = '';

foreach($tablefields as $table => $fields) {

if(in_array($field, $fields)) {

$profiletable = $table;

break;

}

}

if($profiletable) {

$data = array();

if($_G['uid']) {

$data = DB::fetch_first("SELECT ".implode(', ', $tablefields[$profiletable])." FROM ".DB::table('common_member_'.$profiletable)." WHERE uid='$_G[uid]'");

}

if(!$data) {

foreach($tablefields[$profiletable] as $k) {

$data[$k] = '';

}

}

$_G['member'] = array_merge(is_array($_G['member']) ? $_G['member'] : array(), $data);

return $_G['member'][$field];

}

}

function daddslashes($string, $force = 1) {

if(is_array($string)) {

$keys = array_keys($string);

foreach($keys as $key) {

$val = $string[$key];

unset($string[$key]);

$string[addslashes($key)] = daddslashes($val, $force);

}

} else {

$string = addslashes($string);

}

return $string;

}

function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {

$ckey_length = 4;

$key = md5($key != '' ? $key : getglobal('authkey'));

$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));

}

}

function dfsockopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 15, $block = TRUE) {

require_once libfile('function/filesock');

return _dfsockopen($url, $limit, $post, $cookie, $bysocket, $ip, $timeout, $block);

}

function dhtmlspecialchars($string) {

if(is_array($string)) {

foreach($string as $key => $val) {

$string[$key] = dhtmlspecialchars($val);

}

} else {

$string = str_replace(array('&', '"', ''), array('&', '"', '<', '>'), $string);

if(strpos($string, '&#') !== false) {

$string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4}));)/', '&\\1', $string);

}

}

return $string;

}

function dexit($message = '') {

echo $message;

output();

exit();

}

function dheader($string, $replace = true, $http_response_code = 0) {

echo $string;

$islocation = substr(strtolower(trim($string)), 0, 8) == 'location';

if(defined('IN_MOBILE') && strpos($string, 'mobile') === false && $islocation) {

if (strpos($string, '?') === false) {

$string = $string.'?mobile=yes';

} else {

if(strpos($string, '#') === false) {

$string = $string.'&mobile=yes';

} else {

$str_arr = explode('#', $string);

$str_arr[0] = $str_arr[0].'&mobile=yes';

$string = implode('#', $str_arr);

}

}

}

echo $string;

$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($islocation) {

exit();

}

}

function dsetcookie($var, $value = '', $life = 0, $prefix = 1, $httponly = false) {

global $_G;

$config = $_G['config']['cookie'];

$_G['cookie'][$var] = $value;

$var = ($prefix ? $config['cookiepre'] : '').$var;

$_COOKIE[$var] = $var;

if($value == '' || $life < 0) {

$value = '';

$life = -1;

}

if(defined('IN_MOBILE')) {

$httponly = false;

}

$life = $life > 0 ? getglobal('timestamp') + $life : ($life < 0 ? getglobal('timestamp') - 31536000 : 0);

$path = $httponly && PHP_VERSION < '5.2.0' ? $config['cookiepath'].'; HttpOnly' : $config['cookiepath'];

$secure = $_SERVER['SERVER_PORT'] == 443 ? 1 : 0;

if(PHP_VERSION < '5.2.0') {

setcookie($var, $value, $life, $path, $config['cookiedomain'], $secure);

} else {

setcookie($var, $value, $life, $path, $config['cookiedomain'], $secure, $httponly);

}

}

function getcookie($key) {

global $_G;

return isset($_G['cookie'][$key]) ? $_G['cookie'][$key] : '';

}

function fileext($filename) {

return addslashes(trim(substr(strrchr($filename, '.'), 1, 10)));

}

function formhash($specialadd = '') {

global $_G;

$hashadd = defined('IN_ADMINCP') ? 'Only For Discuz! Admin Control Panel' : '';

return substr(md5(substr($_G['timestamp'], 0, -7).$_G['username'].$_G['uid'].$_G['authkey'].$hashadd.$specialadd), 8, 8);

}

function checkrobot($useragent = '') {

static $kw_spiders = array('bot', 'crawl', 'spider' ,'slurp', 'sohu-search', 'lycos', 'robozilla');

static $kw_browsers = array('msie', 'netscape', 'opera', 'konqueror', 'mozilla');

$useragent = strtolower(empty($useragent) ? $_SERVER['HTTP_USER_AGENT'] : $useragent);

if(strpos($useragent, 'http://') === false && dstrpos($useragent, $kw_browsers)) return false;

if(dstrpos($useragent, $kw_spiders)) return true;

return false;

}

function checkmobile() {

global $_G;

$mobile = array();

static $mobilebrowser_list =array('iphone', 'android', 'phone', 'mobile', 'wap', 'netfront', 'java', 'opera mobi', 'opera mini',

'ucweb', 'windows ce', 'symbian', 'series', 'webos', 'sony', 'blackberry', 'dopod', 'nokia', 'samsung',

'palmsource', 'xda', 'pieplus', 'meizu', 'midp', 'cldc', 'motorola', 'foma', 'docomo', 'up.browser',

'up.link', 'blazer', 'helio', 'hosin', 'huawei', 'novarra', 'coolpad', 'webos', 'techfaith', 'palmsource',

'alcatel', 'amoi', 'ktouch', 'nexian', 'ericsson', 'philips', 'sagem', 'wellcom', 'bunjalloo', 'maui', 'smartphone',

'iemobile', 'spice', 'bird', 'zte-', 'longcos', 'pantech', 'gionee', 'portalmmm', 'jig browser', 'hiptop',

'benq', 'haier', '^lct', '320x320', '240x320', '176x220');

$useragent = strtolower($_SERVER['HTTP_USER_AGENT']);

if(($v = dstrpos($useragent, $mobilebrowser_list, true))) {

$_G['mobile'] = $v;

return true;

}

$brower = array('mozilla', 'chrome', 'safari', 'opera', 'm3gate', 'winwap', 'openwave', 'myop');

if(dstrpos($useragent, $brower)) return false;

$_G['mobile'] = 'unknown';

if($_GET['mobile'] === 'yes') {

return true;

} else {

return false;

}

}

function dstrpos($string, &$arr, $returnvalue = false) {

if(empty($string)) return false;

foreach((array)$arr as $v) {

if(strpos($string, $v) !== false) {

$return = $returnvalue ? $v : true;

return $return;

}

}

return false;

}

function isemail($email) {

return strlen($email) > 6 && preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $email);

}

function quescrypt($questionid, $answer) {

return $questionid > 0 && $answer != '' ? substr(md5($answer.md5($questionid)), 16, 8) : '';

}

function random($length, $numeric = 0) {

$seed = base_convert(md5(microtime().$_SERVER['DOCUMENT_ROOT']), 16, $numeric ? 10 : 35);

$seed = $numeric ? (str_replace('0', '', $seed).'012340567890') : ($seed.'zZ'.strtoupper($seed));

$hash = '';

$max = strlen($seed) - 1;

for($i = 0; $i < $length; $i++) {

$hash .= $seed{mt_rand(0, $max)};

}

return $hash;

}

function strexists($string, $find) {

return !(strpos($string, $find) === FALSE);

}

function avatar($uid, $size = 'middle', $returnsrc = FALSE, $real = FALSE, $static = FALSE, $ucenterurl = '') {

global $_G;

static $staticavatar;

if($staticavatar === null) {

$staticavatar = $_G['setting']['avatarmethod'];

}

$ucenterurl = empty($ucenterurl) ? $_G['setting']['ucenterurl'] : $ucenterurl;

$size = in_array($size, array('big', 'middle', 'small')) ? $size : 'middle';

$uid = abs(intval($uid));

$ucenterurl = "http://www.chipsbbs.com/uc_server";

if(!$staticavatar && !$static) {

return $returnsrc ? $ucenterurl.'/avatar.php?uid='.$uid.'&size='.$size : '';

} else {

$uid = sprintf("%09d", $uid);

$dir1 = substr($uid, 0, 3);

$dir2 = substr($uid, 3, 2);

$dir3 = substr($uid, 5, 2);

$file = $ucenterurl.'/data/avatar/'.$dir1.'/'.$dir2.'/'.$dir3.'/'.substr($uid, -2).($real ? '_real' : '').'_avatar_'.$size.'.jpg';

return $returnsrc ? $file : '';

}

}

function lang($file, $langvar = null, $vars = array(), $default = null) {

global $_G;

list($path, $file) = explode('/', $file);

if(!$file) {

$file = $path;

$path = '';

}

if($path != 'plugin') {

$key = $path == '' ? $file : $path.'_'.$file;

if(!isset($_G['lang'][$key])) {

include DISCUZ_ROOT.'./source/language/'.($path == '' ? '' : $path.'/').'lang_'.$file.'.php';

$_G['lang'][$key] = $lang;

}

if(defined('IN_MOBILE') && !defined('TPL_DEFAULT')) {

include DISCUZ_ROOT.'./source/language/mobile/lang_template.php';

$_G['lang'][$key] = array_merge($_G['lang'][$key], $lang);

}

$returnvalue = &$_G['lang'];

} else {

if(empty($_G['config']['plugindeveloper'])) {

loadcache('pluginlanguage_script');

} elseif(!isset($_G['cache']['pluginlanguage_script'][$file]) && preg_match("/^[a-z]+[a-z0-9_]*$/i", $file)) {

if(@include(DISCUZ_ROOT.'./data/plugindata/'.$file.'.lang.php')) {

$_G['cache']['pluginlanguage_script'][$file] = $scriptlang[$file];

} else {

loadcache('pluginlanguage_script');

}

}

$returnvalue = & $_G['cache']['pluginlanguage_script'];

$key = &$file;

}

$return = $langvar !== null ? (isset($returnvalue[$key][$langvar]) ? $returnvalue[$key][$langvar] : null) : $returnvalue[$key];

$return = $return === null ? ($default !== null ? $default : $langvar) : $return;

$searchs = $replaces = array();

if($vars && is_array($vars)) {

foreach($vars as $k => $v) {

$searchs[] = '{'.$k.'}';

$replaces[] = $v;

}

}

if(is_string($return) && strpos($return, '{_G/') !== false) {

preg_match_all('/\{_G\/(.+?)\}/', $return, $gvar);

foreach($gvar[0] as $k => $v) {

$searchs[] = $v;

$replaces[] = getglobal($gvar[1][$k]);

}

}

$return = str_replace($searchs, $replaces, $return);

return $return;

}

function checktplrefresh($maintpl, $subtpl, $timecompare, $templateid, $cachefile, $tpldir, $file) {

static $tplrefresh, $timestamp, $targettplname;

if($tplrefresh === null) {

$tplrefresh = getglobal('config/output/tplrefresh');

$timestamp = getglobal('timestamp');

}

if(empty($timecompare) || $tplrefresh == 1 || ($tplrefresh > 1 && !($timestamp % $tplrefresh))) {

if(empty($timecompare) || @filemtime(DISCUZ_ROOT.$subtpl) > $timecompare) {

require_once DISCUZ_ROOT.'/source/class/class_template.php';

$template = new template();

$template->parse_template($maintpl, $templateid, $tpldir, $file, $cachefile);

if($targettplname === null) {

$targettplname = getglobal('style/tplfile');

if(!empty($targettplname)) {

$targettplname = strtr($targettplname, ':', '_');

update_template_block($targettplname, $template->blocks);

}

$targettplname = true;

}

return TRUE;

}

}

return FALSE;

}

function template($file, $templateid = 0, $tpldir = '', $gettplfile = 0, $primaltpl='') {

global $_G;

static $_init_style = false;

if($_init_style === false) {

$discuz = & chimicron_auto_core::instance();

$discuz->_init_style();

$_init_style = true;

}

$oldfile = $file;

if(strpos($file, ':') !== false) {

$clonefile = '';

list($templateid, $file, $clonefile) = explode(':', $file);

$oldfile = $file;

$file = empty($clonefile) || STYLEID != $_G['cache']['style_default']['styleid'] ? $file : $file.'_'.$clonefile;

if($templateid == 'diy' && STYLEID == $_G['cache']['style_default']['styleid']) {

$_G['style']['prefile'] = '';

/*vot*/$diypath = DISCUZ_ROOT.'./data/diy/'; //DIY template file directory

$preend = '_diy_preview';

$_G['gp_preview'] = !empty($_G['gp_preview']) ? $_G['gp_preview'] : '';

$curtplname = $oldfile;

if(isset($_G['cache']['diytemplatename'.$_G['basescript']])) {

$diytemplatename = &$_G['cache']['diytemplatename'.$_G['basescript']];

} else {

$diytemplatename = &$_G['cache']['diytemplatename'];

}

$tplsavemod = 0;

if(isset($diytemplatename[$file]) && file_exists($diypath.$file.'.htm') && ($tplsavemod = 1) || ($file = $primaltpl ? $primaltpl : $oldfile) && isset($diytemplatename[$file]) && file_exists($diypath.$file.'.htm')) {

$tpldir = 'data/diy';

!$gettplfile && $_G['style']['tplsavemod'] = $tplsavemod;

$curtplname = $file;

/*vot*/if($_G['gp_diy'] == 'yes' || $_G['gp_preview'] == 'yes') { //DIY mode or preview mode, do the following judge

$flag = file_exists($diypath.$file.$preend.'.htm');

if($_G['gp_preview'] == 'yes') {

$file .= $flag ? $preend : '';

} else {

$_G['style']['prefile'] = $flag ? 1 : '';

}

}

} else {

$file = $primaltpl ? $primaltpl : $oldfile;

}

$tplrefresh = $_G['config']['output']['tplrefresh'];

if($tpldir == 'data/diy' && ($tplrefresh ==1 || ($tplrefresh > 1 && !($_G['timestamp'] % $tplrefresh))) && filemtime($diypath.$file.'.htm') < filemtime(DISCUZ_ROOT.TPLDIR.'/'.($primaltpl ? $primaltpl : $oldfile).'.htm')) {

if (!updatediytemplate($file)) {

unlink($diypath.$file.'.htm');

$tpldir = '';

}

}

if (!$gettplfile && empty($_G['style']['tplfile'])) {

$_G['style']['tplfile'] = empty($clonefile) ? $curtplname : $oldfile.':'.$clonefile;

}

$_G['style']['prefile'] = !empty($_G['gp_preview']) && $_G['gp_preview'] == 'yes' ? '' : $_G['style']['prefile'];

} else {

$tpldir = './source/plugin/'.$templateid.'/template';

}

}

$file .= !empty($_G['inajax']) && ($file == 'common/header' || $file == 'common/footer') ? '_ajax' : '';

$tpldir = $tpldir ? $tpldir : (defined('TPLDIR') ? TPLDIR : '');

$templateid = $templateid ? $templateid : (defined('TEMPLATEID') ? TEMPLATEID : '');

$filebak = $file;

if(defined('IN_MOBILE') && !defined('TPL_DEFAULT') && strpos($file, 'mobile/') === false || $_G['forcemobilemessage']) {

$file = 'mobile/'.$oldfile;

}

$tplfile = ($tpldir ? $tpldir.'/' : './template/').$file.'.htm';

$file == 'common/header' && defined('CURMODULE') && CURMODULE && $file = 'common/header_'.$_G['basescript'].'_'.CURMODULE;

if(defined('IN_MOBILE') && !defined('TPL_DEFAULT')) {

if(strpos($tpldir, 'plugin')) {

if(!file_exists(DISCUZ_ROOT.$tpldir.'/'.$file.'.htm')) {

require_once libfile('class/error');

discuz_error::template_error('template_notfound', $tpldir.'/'.$file.'.htm');

} else {

$mobiletplfile = $tpldir.'/'.$file.'.htm';

}

}

!$mobiletplfile && $mobiletplfile = $file.'.htm';

if(strpos($tpldir, 'plugin') && file_exists(DISCUZ_ROOT.$mobiletplfile)) {

$tplfile = $mobiletplfile;

} elseif(!file_exists(DISCUZ_ROOT.TPLDIR.'/'.$mobiletplfile)) {

$mobiletplfile = './template/default/'.$mobiletplfile;

if(!file_exists(DISCUZ_ROOT.$mobiletplfile) && !$_G['forcemobilemessage']) {

$tplfile = str_replace('mobile/', '', $tplfile);

$file = str_replace('mobile/', '', $file);

define('TPL_DEFAULT', true);

} else {

$tplfile = $mobiletplfile;

}

} else {

$tplfile = TPLDIR.'/'.$mobiletplfile;

}

}

$cachefile = './data/template/'.(defined('STYLEID') ? STYLEID.'_' : '_').$templateid.'_'.str_replace('/', '_', $file).'.tpl.php';

if($templateid != 1 && !file_exists(DISCUZ_ROOT.$tplfile)) {

$tplfile = './template/default/'.$filebak.'.htm';

}

if($gettplfile) {

return $tplfile;

}

checktplrefresh($tplfile, $tplfile, @filemtime(DISCUZ_ROOT.$cachefile), $templateid, $cachefile, $tpldir, $file);

return DISCUZ_ROOT.$cachefile;

}

function modauthkey($id) {

global $_G;

return md5($_G['username'].$_G['uid'].$_G['authkey'].substr(TIMESTAMP, 0, -7).$id);

}

function getcurrentnav() {

global $_G;

if(!empty($_G['mnid'])) {

return $_G['mnid'];

}

$mnid = '';

$_G['basefilename'] = $_G['basefilename'] == $_G['basescript'] ? $_G['basefilename'] : $_G['basescript'].'.php';

if(isset($_G['setting']['navmns'][$_G['basefilename']])) {

foreach($_G['setting']['navmns'][$_G['basefilename']] as $navmn) {

if($navmn[0] == array_intersect_assoc($navmn[0], $_GET)) {

$mnid = $navmn[1];

}

}

}

if(!$mnid && isset($_G['setting']['navdms'])) {

foreach($_G['setting']['navdms'] as $navdm => $navid) {

if(strpos(strtolower($_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']), $navdm) !== false) {

$mnid = $navid;

break;

}

}

}

if(!$mnid && isset($_G['setting']['navmn'][$_G['basefilename']])) {

$mnid = $_G['setting']['navmn'][$_G['basefilename']];

}

return $mnid;

}

function loaducenter() {

require_once DISCUZ_ROOT.'./config/config_ucenter.php';

require_once DISCUZ_ROOT.'./uc_client/client.php';

}

function loadcache($cachenames, $force = false) {

global $_G;

static $loadedcache = array();

$cachenames = is_array($cachenames) ? $cachenames : array($cachenames);

$caches = array();

foreach ($cachenames as $k) {

if(!isset($loadedcache[$k]) || $force) {

$caches[] = $k;

$loadedcache[$k] = true;

}

}

if(!empty($caches)) {

$cachedata = cachedata($caches);

foreach($cachedata as $cname => $data) {

if($cname == 'setting') {

$_G['setting'] = $data;

} elseif(strpos($cname, 'usergroup_'.$_G['groupid']) !== false) {

$_G['cache'][$cname] = $_G['group'] = $data;

} elseif($cname == 'style_default') {

$_G['cache'][$cname] = $_G['style'] = $data;

} elseif($cname == 'grouplevels') {

$_G['grouplevels'] = $data;

} else {

$_G['cache'][$cname] = $data;

}

}

}

return true;

}

function cachedata($cachenames) {

global $_G;

static $isfilecache, $allowmem;

if(!isset($isfilecache)) {

$isfilecache = getglobal('config/cache/type') == 'file';

$allowmem = memory('check');

}

$data = array();

$cachenames = is_array($cachenames) ? $cachenames : array($cachenames);

if($allowmem) {

$newarray = array();

foreach ($cachenames as $name) {

$data[$name] = memory('get', $name);

if($data[$name] === null) {

$data[$name] = null;

$newarray[] = $name;

}

}

if(empty($newarray)) {

return $data;

} else {

$cachenames = $newarray;

}

}

if($isfilecache) {

$lostcaches = array();

foreach($cachenames as $cachename) {

if(!@include_once(DISCUZ_ROOT.'./data/cache/cache_'.$cachename.'.php')) {

$lostcaches[] = $cachename;

}

}

if(!$lostcaches) {

return $data;

}

$cachenames = $lostcaches;

unset($lostcaches);

}

$query = DB::query("SELECT * FROM ".DB::table('common_syscache')." WHERE cname IN ('".implode("','", $cachenames)."')");

while($syscache = DB::fetch($query)) {

$data[$syscache['cname']] = $syscache['ctype'] ? unserialize($syscache['data']) : $syscache['data'];

$allowmem && (memory('set', $syscache['cname'], $data[$syscache['cname']]));

if($isfilecache) {

$cachedata = '$data[\''.$syscache['cname'].'\'] = '.var_export($data[$syscache['cname']], true).";\n\n";

if($fp = @fopen(DISCUZ_ROOT.'./data/cache/cache_'.$syscache['cname'].'.php', 'wb')) {

fwrite($fp, "<?php \n//Discuz! cache file, DO NOT modify me!\n//Identify: ".md5($syscache['cname'].$cachedata.$_G['config']['security']['authkey'])."\n\n$cachedata?>");

fclose($fp);

}

}

}

foreach($cachenames as $name) {

if($data[$name] === null) {

$data[$name] = null;

$allowmem && (memory('set', $name, array()));

}

}

return $data;

}

function dgmdate($timestamp, $format = 'dt', $timeoffset = '9999', $uformat = '') {

global $_G;

$format == 'u' && !$_G['setting']['dateconvert'] && $format = 'dt';

static $dformat, $tformat, $dtformat, $offset, $lang;

if($dformat === null) {

$dformat = getglobal('setting/dateformat');

$tformat = getglobal('setting/timeformat');

$dtformat = $dformat.' '.$tformat;

$offset = getglobal('member/timeoffset');

$lang = lang('core', 'date');

}

$timeoffset = $timeoffset == 9999 ? $offset : $timeoffset;

$timestamp += $timeoffset * 3600;

$format = empty($format) || $format == 'dt' ? $dtformat : ($format == 'd' ? $dformat : ($format == 't' ? $tformat : $format));

if($format == 'u') {

$todaytimestamp = TIMESTAMP - (TIMESTAMP + $timeoffset * 3600) % 86400 + $timeoffset * 3600;

$s = gmdate(!$uformat ? str_replace(":i", ":i:s", $dtformat) : $uformat, $timestamp);

$time = TIMESTAMP + $timeoffset * 3600 - $timestamp;

if($timestamp >= $todaytimestamp) {

if($time > 3600) {

return ''.intval($time / 3600).' '.$lang['hour'].$lang['before'].'';

} elseif($time > 1800) {

return ''.$lang['half'].$lang['hour'].$lang['before'].'';

} elseif($time > 60) {

return ''.intval($time / 60).' '.$lang['min'].$lang['before'].'';

} elseif($time > 0) {

return ''.$time.' '.$lang['sec'].$lang['before'].'';

} elseif($time == 0) {

return ''.$lang['now'].'';

} else {

return $s;

}

} elseif(($days = intval(($todaytimestamp - $timestamp) / 86400)) >= 0 && $days < 7) {

if($days == 0) {

return ''.$lang['yday'].' '.gmdate($tformat, $timestamp).'';

} elseif($days == 1) {

return ''.$lang['byday'].' '.gmdate($tformat, $timestamp).'';

} else {

return ''.($days + 1).' '.$lang['day'].$lang['before'].'';

}

} else {

return $s;

}

} else {

return gmdate($format, $timestamp);

}

}

function dmktime($date) {

if(strpos($date, '-')) {

$time = explode('-', $date);

return mktime(0, 0, 0, $time[1], $time[2], $time[0]);

}

return 0;

}

function save_syscache($cachename, $data) {

static $isfilecache, $allowmem;

if(!isset($isfilecache)) {

$isfilecache = getglobal('config/cache/type') == 'file';

$allowmem = memory('check');

}

if(is_array($data)) {

$ctype = 1;

$data = addslashes(serialize($data));

} else {

$ctype = 0;

}

DB::query("REPLACE INTO ".DB::table('common_syscache')." (cname, ctype, dateline, data) VALUES ('$cachename', '$ctype', '".TIMESTAMP."', '$data')");

$allowmem && memory('rm', $cachename);

$isfilecache && @unlink(DISCUZ_ROOT.'./data/cache/cache_'.$cachename.'.php');

}

function block_get($parameter) {

global $_G;

static $allowmem;

if($allowmem === null) {

include_once libfile('function/block');

$allowmem = getglobal('setting/memory/diyblock/enable') && memory('check');

}

if(!$allowmem) {

block_get_batch($parameter);

return true;

}

$blockids = explode(',', $parameter);

$lostbids = array();

foreach ($blockids as $bid) {

$bid = intval($bid);

if($bid) {

$_G['block'][$bid] = memory('get', 'blockcache_'.$bid);

if($_G['block'][$bid] === null) {

$lostbids[] = $bid;

} else {

$styleid = $_G['block'][$bid]['styleid'];

if($styleid && !isset($_G['blockstyle_'.$styleid])) {

$_G['blockstyle_'.$styleid] = memory('get', 'blockstylecache_'.$styleid);

}

}

}

}

if($lostbids) {

block_get_batch(implode(',', $lostbids));

foreach ($lostbids as $bid) {

if(isset($_G['block'][$bid])) {

memory('set', 'blockcache_'.$bid, $_G['block'][$bid], getglobal('setting/memory/diyblock/ttl'));

$styleid = $_G['block'][$bid]['styleid'];

if($styleid && $_G['blockstyle_'.$styleid]) {

memory('set', 'blockstylecache_'.$styleid, $_G['blockstyle_'.$styleid], getglobal('setting/memory/diyblock/ttl'));

}

}

}

}

}

function block_display($bid) {

include_once libfile('function/block');

block_display_batch($bid);

}

function dimplode($array) {

if(!empty($array)) {

return "'".implode("','", is_array($array) ? $array : array($array))."'";

} else {

return 0;

}

}

function libfile($libname, $folder = '') {

$libpath = DISCUZ_ROOT.'/source/'.$folder;

if(strstr($libname, '/')) {

list($pre, $name) = explode('/', $libname);

return realpath("{$libpath}/{$pre}/{$pre}_{$name}.php");

} else {

return realpath("{$libpath}/{$libname}.php");

}

}

function dstrlen($str) {

if(strtolower(CHARSET) != 'utf-8') {

return strlen($str);

}

return mb_strlen($str); //vot

/*//vot

$count = 0;

for($i = 0; $i < strlen($str); $i++){

$value = ord($str[$i]);

if($value > 127) {

$count++;

if($value >= 192 && $value <= 223) $i++;

elseif($value >= 224 && $value <= 239) $i = $i + 2;

elseif($value >= 240 && $value <= 247) $i = $i + 3;

}

$count++;

}

return $count;

*/

}

function cutstr($string, $length, $dot = ' ...') {

if(strlen($string) <= $length) {

return $string;

}

$pre = chr(1);

$end = chr(1);

$string = str_replace(array('&', '"', '<', '>'), array($pre.'&'.$end, $pre.'"'.$end, $pre.''.$end), $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($pre.'&'.$end, $pre.'"'.$end, $pre.''.$end), array('&', '"', '<', '>'), $strcut);

$pos = strrpos($strcut, chr(1));

if($pos !== false) {

$strcut = substr($strcut,0,$pos);

}

return $strcut.$dot;

}

function dstripslashes($string) {

if(empty($string)) return $string;

if(is_array($string)) {

foreach($string as $key => $val) {

$string[$key] = dstripslashes($val);

}

} else {

$string = stripslashes($string);

}

return $string;

}

function aidencode($aid, $type = 0, $tid = 0) {

global $_G;

$s = !$type ? $aid.'|'.substr(md5($aid.md5($_G['config']['security']['authkey']).TIMESTAMP.$_G['uid']), 0, 8).'|'.TIMESTAMP.'|'.$_G['uid'].'|'.$tid : $aid.'|'.md5($aid.md5($_G['config']['security']['authkey']).TIMESTAMP).'|'.TIMESTAMP;

return rawurlencode(base64_encode($s));

}

function getforumimg($aid, $nocache = 0, $w = 140, $h = 140, $type = '') {

global $_G;

$key = md5($aid.'|'.$w.'|'.$h);

return 'forum.php?mod=image&aid='.$aid.'&size='.$w.'x'.$h.'&key='.rawurlencode($key).($nocache ? '&nocache=yes' : '').($type ? '&type='.$type : '');

}

function rewriteoutput($type, $returntype, $host) {

global $_G;

$fextra = '';

if($type == 'forum_forumdisplay') {

list(,,, $fid, $page, $extra) = func_get_args();

$r = array(

'{fid}' => empty($_G['setting']['forumkeys'][$fid]) ? $fid : $_G['setting']['forumkeys'][$fid],

'{page}' => $page ? $page : 1,

);

} elseif($type == 'forum_viewthread') {

list(,,, $tid, $page, $prevpage, $extra) = func_get_args();

$r = array(

'{tid}' => $tid,

'{page}' => $page ? $page : 1,

'{prevpage}' => $prevpage && !IS_ROBOT ? $prevpage : 1,

);

} elseif($type == 'home_space') {

list(,,, $uid, $username, $extra) = func_get_args();

$_G['setting']['rewritecompatible'] && $username = rawurlencode($username);

$r = array(

'{user}' => $uid ? 'uid' : 'username',

'{value}' => $uid ? $uid : $username,

);

} elseif($type == 'home_blog') {

list(,,, $uid, $blogid, $extra) = func_get_args();

$r = array(

'{uid}' => $uid,

'{blogid}' => $blogid,

);

} elseif($type == 'group_group') {

list(,,, $fid, $page, $extra) = func_get_args();

$r = array(

'{fid}' => $fid,

'{page}' => $page ? $page : 1,

);

} elseif($type == 'portal_topic') {

list(,,, $name, $extra) = func_get_args();

$r = array(

'{name}' => $name,

);

} elseif($type == 'portal_article') {

list(,,, $id, $page, $extra) = func_get_args();

$r = array(

'{id}' => $id,

'{page}' => $page ? $page : 1,

);

} elseif($type == 'forum_archiver') {

list(,, $action, $value, $page, $extra) = func_get_args();

$host = '';

$r = array(

'{action}' => $action,

'{value}' => $value,

);

if($page) {

$fextra = '?page='.$page;

}

}

$href = str_replace(array_keys($r), $r, $_G['setting']['rewriterule'][$type]).$fextra;

if(!$returntype) {

return '';

} else {

return $host.$href;

}

}

function mobilereplace($file, $replace) {

global $_G;

if(strpos($replace, 'mobile=') === false) {

if(strpos($replace, '?') === false) {

$replace = 'href="'.$file.$replace.'?mobile=yes"';

} else {

$replace = 'href="'.$file.$replace.'&mobile=yes"';

}

return $replace;

} else {

return 'href="'.$file.$replace.'"';

}

}

function mobileoutput() {

global $_G;

if(!defined('TPL_DEFAULT')) {

$content = ob_get_contents();

ob_end_clean();

$content = preg_replace("/href=\"(\w+\.php)(.*?)\"/e", "mobilereplace('\\1', '\\2')", $content);

ob_start();

$content = '<?xml version="1.0" encoding="utf-8"?>'.$content;

if('utf-8' != CHARSET) {

@header('Content-Type: text/html; charset=utf-8');

$content = diconv($content, CHARSET, 'utf-8');

}

echo $content;

exit();

} elseif (defined('TPL_DEFAULT') && !$_G['cookie']['dismobilemessage'] && $_G['mobile']) {

ob_end_clean();

ob_start();

$_G['forcemobilemessage'] = true;

$query_sting_tmp = str_replace(array('&mobile=yes', 'mobile=yes'), array(''), $_SERVER['QUERY_STRING']);

$_G['setting']['mobile']['pageurl'] = $_G['siteurl'].substr($_G['PHP_SELF'], 1).($query_sting_tmp ? '?'.$query_sting_tmp.'&mobile=no' : '?mobile=no' );

unset($query_sting_tmp);

dsetcookie('dismobilemessage', '1', 3600);

showmessage('not_in_mobile');

exit;

}

}

function output() {

global $_G;

if(defined('DISCUZ_OUTPUTED')) {

return;

} else {

define('DISCUZ_OUTPUTED', 1);

}

if(!empty($_G['blockupdate'])) {

block_updatecache($_G['blockupdate']['bid']);

}

if(defined('IN_MOBILE')) {

mobileoutput();

}

$havedomain = implode('', $_G['setting']['domain']['app']);

if($_G['setting']['rewritestatus'] || !empty($havedomain)) {

$content = ob_get_contents();

$content = output_replace($content);

ob_end_clean();

$_G['gzipcompress'] ? ob_start('ob_gzhandler') : ob_start();

echo $content;

}

if($_G['setting']['ftp']['connid']) {

@ftp_close($_G['setting']['ftp']['connid']);

}

$_G['setting']['ftp'] = array();

if(defined('CACHE_FILE') && CACHE_FILE && !defined('CACHE_FORBIDDEN') && !defined('IN_MOBILE')) {

if(diskfreespace(DISCUZ_ROOT.'./'.$_G['setting']['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);

}

}

if(defined('DISCUZ_DEBUG') && DISCUZ_DEBUG && @include(libfile('function/debug'))) {

function_exists('debugmessage') && debugmessage();

}

}

function output_replace($content) {

global $_G;

if(defined('IN_MODCP') || defined('IN_ADMINCP')) return $content;

if(!empty($_G['setting']['output']['str']['search'])) {

if(empty($_G['setting']['domain']['app']['default'])) {

$_G['setting']['output']['str']['replace'] = str_replace('{CURHOST}', $_G['siteurl'], $_G['setting']['output']['str']['replace']);

}

$content = str_replace($_G['setting']['output']['str']['search'], $_G['setting']['output']['str']['replace'], $content);

}

if(!empty($_G['setting']['output']['preg']['search'])) {

if(empty($_G['setting']['domain']['app']['default'])) {

$_G['setting']['output']['preg']['search'] = str_replace('\{CURHOST\}', preg_quote($_G['siteurl'], '/'), $_G['setting']['output']['preg']['search']);

$_G['setting']['output']['preg']['replace'] = str_replace('{CURHOST}', $_G['siteurl'], $_G['setting']['output']['preg']['replace']);

}

$content = preg_replace($_G['setting']['output']['preg']['search'], $_G['setting']['output']['preg']['replace'], $content);

}

return $content;

}

function output_ajax() {

global $_G;

$s = ob_get_contents();

ob_end_clean();

$s = preg_replace("/([\\x01-\\x08\\x0b-\\x0c\\x0e-\\x1f])+/", ' ', $s);

$s = str_replace(array(chr(0), ']]>'), array(' ', ']]>'), $s);

if(defined('DISCUZ_DEBUG') && DISCUZ_DEBUG && @include(libfile('function/debug'))) {

function_exists('debugmessage') && $s .= debugmessage(1);

}

$havedomain = implode('', $_G['setting']['domain']['app']);

if($_G['setting']['rewritestatus'] || !empty($havedomain)) {

$s = output_replace($s);

}

return $s;

}

function runhooks() {

if(!defined('HOOKTYPE')) {

define('HOOKTYPE', !defined('IN_MOBILE') ? 'hookscript' : 'hookscriptmobile');

}

if(defined('CURMODULE')) {

global $_G;

if($_G['setting']['plugins'][HOOKTYPE.'_common']) {

hookscript('common', 'global', 'funcs', array(), 'common');

}

hookscript(CURMODULE, $_G['basescript']);

}

}

function hookscript($script, $hscript, $type = 'funcs', $param = array(), $func = '') {

global $_G;

static $pluginclasses;

if($hscript == 'home') {

if($script != 'spacecp') {

$script = 'space_'.(!empty($_G['gp_do']) ? $_G['gp_do'] : (!empty($_GET['do']) ? $_GET['do'] : ''));

} else {

$script .= !empty($_G['gp_ac']) ? '_'.$_G['gp_ac'] : (!empty($_GET['ac']) ? '_'.$_GET['ac'] : '');

}

}

if(!isset($_G['setting'][HOOKTYPE][$hscript][$script][$type])) {

return;

}

if(!isset($_G['cache']['plugin'])) {

loadcache('plugin');

}

foreach((array)$_G['setting'][HOOKTYPE][$hscript][$script]['module'] as $identifier => $include) {

$hooksadminid[$identifier] = !$_G['setting'][HOOKTYPE][$hscript][$script]['adminid'][$identifier] || ($_G['setting'][HOOKTYPE][$hscript][$script]['adminid'][$identifier] && $_G['adminid'] > 0 && $_G['setting']['hookscript'][$hscript][$script]['adminid'][$identifier] >= $_G['adminid']);

if($hooksadminid[$identifier]) {

@include_once DISCUZ_ROOT.'./source/plugin/'.$include.'.class.php';

}

}

if(@is_array($_G['setting'][HOOKTYPE][$hscript][$script][$type])) {

$_G['inhookscript'] = true;

$funcs = !$func ? $_G['setting'][HOOKTYPE][$hscript][$script][$type] : array($func => $_G['setting'][HOOKTYPE][$hscript][$script][$type][$func]);

foreach($funcs as $hookkey => $hookfuncs) {

foreach($hookfuncs as $hookfunc) {

if($hooksadminid[$hookfunc[0]]) {

$classkey = (HOOKTYPE != 'hookscriptmobile' ? '' : 'mobile').'plugin_'.($hookfunc[0].($hscript != 'global' ? '_'.$hscript : ''));

if(!class_exists($classkey)) {

continue;

}

if(!isset($pluginclasses[$classkey])) {

$pluginclasses[$classkey] = new $classkey;

}

if(!method_exists($pluginclasses[$classkey], $hookfunc[1])) {

continue;

}

$return = $pluginclasses[$classkey]->$hookfunc[1]($param);

if(is_array($return)) {

if(!isset($_G['setting']['pluginhooks'][$hookkey]) || is_array($_G['setting']['pluginhooks'][$hookkey])) {

foreach($return as $k => $v) {

$_G['setting']['pluginhooks'][$hookkey][$k] .= $v;

}

}

} else {

if(!is_array($_G['setting']['pluginhooks'][$hookkey])) {

$_G['setting']['pluginhooks'][$hookkey] .= $return;

} else {

foreach($_G['setting']['pluginhooks'][$hookkey] as $k => $v) {

$_G['setting']['pluginhooks'][$hookkey][$k] .= $return;

}

}

}

}

}

}

}

$_G['inhookscript'] = false;

}

function hookscriptoutput($tplfile) {

global $_G;

if(!empty($_G['hookscriptoutput'])) {

return;

}

if(!empty($_G['gp_mobiledata'])) {

require_once libfile('class/mobiledata');

$mobiledata = new mobiledata();

if($mobiledata->validator()) {

$mobiledata->outputvariables();

}

}

hookscript('global', 'global');

if(defined('CURMODULE')) {

$param = array('template' => $tplfile, 'message' => $_G['hookscriptmessage'], 'values' => $_G['hookscriptvalues']);

hookscript(CURMODULE, $_G['basescript'], 'outputfuncs', $param);

}

$_G['hookscriptoutput'] = true;

}

function pluginmodule($pluginid, $type) {

global $_G;

if(!isset($_G['cache']['plugin'])) {

loadcache('plugin');

}

list($identifier, $module) = explode(':', $pluginid);

if(!is_array($_G['setting']['plugins'][$type]) || !array_key_exists($pluginid, $_G['setting']['plugins'][$type])) {

showmessage('plugin_nonexistence');

}

if(!empty($_G['setting']['plugins'][$type][$pluginid]['url'])) {

dheader('location: '.$_G['setting']['plugins'][$type][$pluginid]['url']);

}

$directory = $_G['setting']['plugins'][$type][$pluginid]['directory'];

if(empty($identifier) || !preg_match("/^[a-z]+[a-z0-9_]*\/$/i", $directory) || !preg_match("/^[a-z0-9_\-]+$/i", $module)) {

showmessage('undefined_action');

}

if(@!file_exists(DISCUZ_ROOT.($modfile = './source/plugin/'.$directory.$module.'.inc.php'))) {

showmessage('plugin_module_nonexistence', '', array('mod' => $modfile));

}

return DISCUZ_ROOT.$modfile;

}

function updatecreditbyaction($action, $uid = 0, $extrasql = array(), $needle = '', $coef = 1, $update = 1, $fid = 0) {

include_once libfile('class/credit');

$credit = & credit::instance();

if($extrasql) {

$credit->extrasql = $extrasql;

}

return $credit->execrule($action, $uid, $needle, $coef, $update, $fid);

}

function checklowerlimit($action, $uid = 0, $coef = 1, $fid = 0, $returnonly = 0) {

require_once libfile('function/credit');

return _checklowerlimit($action, $uid, $coef, $fid, $returnonly);

}

function batchupdatecredit($action, $uids = 0, $extrasql = array(), $coef = 1, $fid = 0) {

include_once libfile('class/credit');

$credit = & credit::instance();

if($extrasql) {

$credit->extrasql = $extrasql;

}

return $credit->updatecreditbyrule($action, $uids, $coef, $fid);

}

function updatemembercount($uids, $dataarr = array(), $checkgroup = true, $operation = '', $relatedid = 0, $ruletxt = '') {

if(!empty($uids) && (is_array($dataarr) && $dataarr)) {

require_once libfile('function/credit');

return _updatemembercount($uids, $dataarr, $checkgroup, $operation, $relatedid, $ruletxt);

}

return true;

}

function checkusergroup($uid = 0) {

require_once libfile('class/credit');

$credit = & credit::instance();

$credit->checkusergroup($uid);

}

function checkformulasyntax($formula, $operators, $tokens) {

$var = implode('|', $tokens);

$operator = implode('', $operators);

$operator = str_replace(

array('+', '-', '*', '/', '(', ')', '{', '}', '\''),

array('\+', '\-', '\*', '\/', '\(', '\)', '\{', '\}', '\\\''),

$operator

);

if(!empty($formula)) {

if(!preg_match("/^([$operator\.\d\(\)]|(($var)([$operator\(\)]|$)+))+$/", $formula) || !is_null(eval(preg_replace("/($var)/", "\$\\1", $formula).';'))){

return false;

}

}

return true;

}

function checkformulacredits($formula) {

return checkformulasyntax(

$formula,

array('+', '-', '*', '/', ' '),

array('extcredits[1-8]', 'digestposts', 'posts', 'threads', 'oltime', 'friends', 'doings', 'polls', 'blogs', 'albums', 'sharings')

);

}

function debug($var = null, $vardump = false) {

echo '

';

if($var === null) {

print_r($GLOBALS);

} else {

if($vardump) {

var_dump($var);

} else {

print_r($var);

}

}

exit();

}

function debuginfo() {

global $_G;

if(getglobal('setting/debug')) {

$db = & DB::object();

$_G['debuginfo'] = array(

'time' => number_format((dmicrotime() - $_G['starttime']), 6),

'queries' => $db->querynum,

'memory' => ucwords($_G['memory'])

);

if($db->slaveid) {

$_G['debuginfo']['queries'] = 'Total '.$db->querynum.', Slave '.$db->slavequery;

}

return TRUE;

} else {

return FALSE;

}

}

function getfocus_rand($module) {

global $_G;

if(empty($_G['setting']['focus']) || !array_key_exists($module, $_G['setting']['focus'])) {

return null;

}

do {

$focusid = $_G['setting']['focus'][$module][array_rand($_G['setting']['focus'][$module])];

if(!empty($_G['cookie']['nofocus_'.$focusid])) {

unset($_G['setting']['focus'][$module][$focusid]);

$continue = 1;

} else {

$continue = 0;

}

} while(!empty($_G['setting']['focus'][$module]) && $continue);

if(!$_G['setting']['focus'][$module]) {

return null;

}

loadcache('focus');

if(empty($_G['cache']['focus']['data']) || !is_array($_G['cache']['focus']['data'])) {

return null;

}

return $focusid;

}

function check_seccode($value, $idhash) {

global $_G;

if(!$_G['setting']['seccodestatus']) {

return true;

}

if(!isset($_G['cookie']['seccode'.$idhash])) {

return false;

}

list($checkvalue, $checktime, $checkidhash, $checkformhash) = explode("\t", authcode($_G['cookie']['seccode'.$idhash], 'DECODE', $_G['config']['security']['authkey']));

return $checkvalue == strtoupper($value) && TIMESTAMP - 180 > $checktime && $checkidhash == $idhash && FORMHASH == $checkformhash;

}

function check_secqaa($value, $idhash) {

global $_G;

if(!$_G['setting']['secqaa']) {

return true;

}

if(!isset($_G['cookie']['secqaa'.$idhash])) {

return false;

}

loadcache('secqaa');

list($checkvalue, $checktime, $checkidhash, $checkformhash) = explode("\t", authcode($_G['cookie']['secqaa'.$idhash], 'DECODE', $_G['config']['security']['authkey']));

return $checkvalue == md5($value) && TIMESTAMP - 180 > $checktime && $checkidhash == $idhash && FORMHASH == $checkformhash;

}

function adshow($parameter) {

global $_G;

if($_G['inajax']) {

return;

}

$params = explode('/', $parameter);

$customid = 0;

$customc = explode('_', $params[0]);

if($customc[0] == 'custom') {

$params[0] = $customc[0];

$customid = $customc[1];

}

$adcontent = null;

if(empty($_G['setting']['advtype']) || !in_array($params[0], $_G['setting']['advtype'])) {

$adcontent = '';

}

if($adcontent === null) {

loadcache('advs');

$adids = array();

$evalcode = &$_G['cache']['advs']['evalcode'][$params[0]];

$parameters = &$_G['cache']['advs']['parameters'][$params[0]];

$codes = &$_G['cache']['advs']['code'][$_G['basescript']][$params[0]];

if(!empty($codes)) {

foreach($codes as $adid => $code) {

$parameter = &$parameters[$adid];

$checked = true;

@eval($evalcode['check']);

if($checked) {

$adids[] = $adid;

}

}

if(!empty($adids)) {

$adcode = $extra = '';

@eval($evalcode['create']);

if(empty($notag)) {

$adcontent = '

'.$adcode.'

';

} else {

$adcontent = $adcode;

}

}

}

}

$adfunc = 'ad_'.$params[0];

$_G['setting']['pluginhooks'][$adfunc] = null;

hookscript('ad', 'global', 'funcs', array('params' => $params, 'content' => $adcontent), $adfunc);

hookscript('ad', $_G['basescript'], 'funcs', array('params' => $params, 'content' => $adcontent), $adfunc);

return $_G['setting']['pluginhooks'][$adfunc] === null ? $adcontent : $_G['setting']['pluginhooks'][$adfunc];

}

function showmessage($message, $url_forward = '', $values = array(), $extraparam = array(), $custom = 0) {

require_once libfile('function/message');

return dshowmessage($message, $url_forward, $values, $extraparam, $custom);

}

function submitcheck($var, $allowget = 0, $seccodecheck = 0, $secqaacheck = 0) {

if(!getgpc($var)) {

return FALSE;

} else {

global $_G;

if(!empty($_G['gp_mobiledata'])) {

require_once libfile('class/mobiledata');

$mobiledata = new mobiledata();

if($mobiledata->validator()) {

return TRUE;

}

}

if($allowget || ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_G['gp_formhash']) && $_G['gp_formhash'] == formhash() && empty($_SERVER['HTTP_X_FLASH_VERSION']) && (empty($_SERVER['HTTP_REFERER']) ||

preg_replace("/https?:\/\/([^\:\/]+).*/i", "\\1", $_SERVER['HTTP_REFERER']) == preg_replace("/([^\:]+).*/", "\\1", $_SERVER['HTTP_HOST'])))) {

if(checkperm('seccode')) {

if($secqaacheck && !check_secqaa($_G['gp_secanswer'], $_G['gp_sechash'])) {

showmessage('submit_secqaa_invalid');

}

if($seccodecheck && !check_seccode($_G['gp_seccodeverify'], $_G['gp_sechash'])) {

showmessage('submit_seccode_invalid');

}

}

return TRUE;

} else {

showmessage('submit_invalid');

}

}

}

function multi($num, $perpage, $curpage, $mpurl, $maxpages = 0, $page = 10, $autogoto = FALSE, $simple = FALSE) {

global $_G;

$ajaxtarget = !empty($_G['gp_ajaxtarget']) ? " ajaxtarget=\"".htmlspecialchars($_G['gp_ajaxtarget'])."\" " : '';

$a_name = '';

if(strpos($mpurl, '#') !== FALSE) {

$a_strs = explode('#', $mpurl);

$mpurl = $a_strs[0];

$a_name = '#'.$a_strs[1];

}

if(defined('IN_ADMINCP')) {

$shownum = $showkbd = TRUE;

$lang['prev'] = '‹‹';

$lang['next'] = '››';

} else {

$shownum = $showkbd = FALSE;

if(defined('IN_MOBILE') && !defined('TPL_DEFAULT')) {

$lang['prev'] = lang('core', 'prevpage');

$lang['next'] = lang('core', 'nextpage');

} else {

$lang['prev'] = '  ';

$lang['next'] = lang('core', 'nextpage');

}

}

if(defined('IN_MOBILE') && !defined('TPL_DEFAULT')) {

$dot = '..';

$page = intval($page) < 10 && intval($page) > 0 ? $page : 4 ;

} else {

$dot = '...';

}

$multipage = '';

$mpurl .= strpos($mpurl, '?') !== FALSE ? '&' : '?';

$realpages = 1;

$_G['page_next'] = 0;

$page -= strlen($curpage) - 1;

if($page <= 0) {

$page = 1;

}

if($num > $perpage) {

$offset = floor($page * 0.5);

$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;

}

}

$_G['page_next'] = $to;

$multipage = ($curpage - $offset > 1 && $pages > $page ? '1 '.$dot.'' : '').

($curpage > 1 && !$simple ? ''.$lang['prev'].'' : '');

for($i = $from; $i <= $to; $i++) {

$multipage .= $i == $curpage ? ''.$i.'' :

''.$i.'';

}

$multipage .= ($to < $pages ? ''.$dot.' '.$realpages.'' : '').

($curpage < $pages && !$simple ? ''.$lang['next'].'' : '').

($showkbd && !$simple && $pages > $page && !$ajaxtarget ? '' : '');

$multipage = $multipage ? '

'.($shownum && !$simple ? ' '.$num.' ' : '').$multipage.'

' : '';

}

$maxpage = $realpages;

return $multipage;

}

function simplepage($num, $perpage, $curpage, $mpurl) {

$return = '';

$lang['next'] = lang('core', 'nextpage');

$lang['prev'] = lang('core', 'prevpage');

$next = $num == $perpage ? ''.$lang['next'].'' : '';

$prev = $curpage > 1 ? ''.$prev.$next.'

';

}

return $return;

}

function censor($message, $modword = NULL, $return = FALSE) {

global $_G;

require_once libfile('class/censor');

$censor = discuz_censor::instance();

$censor->check($message, $modword);

if($censor->modbanned()) {

$wordbanned = implode(', ', $censor->words_found);

if($return) {

return array('message' => lang('message', 'word_banned', array('wordbanned' => $wordbanned)));

}

if(!defined('IN_ADMINCP')) {

showmessage('word_banned', '', array('wordbanned' => $wordbanned));

} else {

cpmsg(lang('message', 'word_banned'), '', 'error', array('wordbanned' => $wordbanned));

}

}

if($_G['group']['allowposturl'] == 0 || $_G['group']['allowposturl'] == 2) {

$urllist = get_url_list($message);

if(is_array($urllist[1])) foreach($urllist[1] as $key => $val) {

if(!$val = trim($val)) continue;

if(!iswhitelist($val)) {

if($_G['group']['allowposturl'] == 0) {

showmessage('post_url_nopermission');

} elseif($_G['group']['allowposturl'] == 2) {

$message = str_replace('[url]'.$urllist[0][$key].'[/url]', $urllist[0][$key], $message);

$message = preg_replace(

array(

"@\[url=".preg_quote($urllist[0][$key],'@')."\](.*?)\[/url\]@i",

"@href=('|\")".preg_quote($urllist[0][$key],'@')."\\1@i",

"@\[url\](.*?".preg_quote($urllist[0][$key],'@').".*?)\[/url\]@i",

),

array(

'\\1',

'',

'\\1',

),

$message);

}

}

}

}

return $message;

}

function censormod($message) {

global $_G;

if($_G['group']['ignorecensor']) {

return false;

}

$modposturl = false;

if($_G['group']['allowposturl'] == 1) {

$urllist = get_url_list($message);

if(is_array($urllist[1])) foreach($urllist[1] as $key => $val) {

if(!$val = trim($val)) continue;

if(!iswhitelist($val)) {

$modposturl = true;

}

}

}

if($modposturl) {

return true;

}

require_once libfile('class/censor');

$censor = discuz_censor::instance();

$censor->check($message);

return $censor->modmoderated();

}

function space_merge(&$values, $tablename) {

global $_G;

$uid = empty($values['uid'])?$_G['uid']:$values['uid'];

$var = "member_{$uid}_{$tablename}";

if($uid) {

if(!isset($_G[$var])) {

$query = DB::query("SELECT * FROM ".DB::table('common_member_'.$tablename)." WHERE uid='$uid'");

if($_G[$var] = DB::fetch($query)) {

if($tablename == 'field_home') {

$_G['setting']['privacy'] = empty($_G['setting']['privacy']) ? array() : (is_array($_G['setting']['privacy']) ? $_G['setting']['privacy'] : unserialize($_G['setting']['privacy']));

$_G[$var]['privacy'] = empty($_G[$var]['privacy'])? array() : is_array($_G[$var]['privacy']) ? $_G[$var]['privacy'] : unserialize($_G[$var]['privacy']);

foreach (array('feed','view','profile') as $pkey) {

if(empty($_G[$var]['privacy'][$pkey]) && !isset($_G[$var]['privacy'][$pkey])) {

$_G[$var]['privacy'][$pkey] = isset($_G['setting']['privacy'][$pkey]) ? $_G['setting']['privacy'][$pkey] : array();

}

}

$_G[$var]['acceptemail'] = empty($_G[$var]['acceptemail'])? array() : unserialize($_G[$var]['acceptemail']);

if(empty($_G[$var]['acceptemail'])) {

$_G[$var]['acceptemail'] = empty($_G['setting']['acceptemail'])?array():unserialize($_G['setting']['acceptemail']);

}

}

} else {

DB::insert('common_member_'.$tablename, array('uid'=>$uid));

$_G[$var] = array();

}

}

$values = array_merge($values, $_G[$var]);

}

}

function runlog($file, $message, $halt=0) {

global $_G;

$nowurl = $_SERVER['REQUEST_URI']?$_SERVER['REQUEST_URI']:($_SERVER['PHP_SELF']?$_SERVER['PHP_SELF']:$_SERVER['SCRIPT_NAME']);

$log = dgmdate($_G['timestamp'], 'Y-m-d H:i:s')."\t".$_G['clientip']."\t$_G[uid]\t{$nowurl}\t".str_replace(array("\r", "\n"), array(' ', ' '), trim($message))."\n";

writelog($file, $log);

if($halt) {

exit();

}

}

function stripsearchkey($string) {

$string = trim($string);

$string = str_replace('*', '%', addcslashes($string, '%_'));

$string = str_replace('_', '\_', $string);

return $string;

}

function dmkdir($dir, $mode = 0777, $makeindex = TRUE){

if(!is_dir($dir)) {

dmkdir(dirname($dir));

@mkdir($dir, $mode);

if(!empty($makeindex)) {

@touch($dir.'/index.html'); @chmod($dir.'/index.html', 0777);

}

}

return true;

}

function dreferer($default = '') {

global $_G;

$default = empty($default) ? $GLOBALS['_t_curapp'] : '';

$_G['referer'] = !empty($_G['gp_referer']) ? $_G['gp_referer'] : $_SERVER['HTTP_REFERER'];

$_G['referer'] = substr($_G['referer'], -1) == '?' ? substr($_G['referer'], 0, -1) : $_G['referer'];

if(strpos($_G['referer'], 'member.php?mod=logging')) {

$_G['referer'] = $default;

}

$_G['referer'] = htmlspecialchars($_G['referer']);

$_G['referer'] = str_replace('&', '&', $_G['referer']);

$reurl = parse_url($_G['referer']);

if(!empty($reurl['host']) && !in_array($reurl['host'], array($_SERVER['HTTP_HOST'], 'www.'.$_SERVER['HTTP_HOST'])) && !in_array($_SERVER['HTTP_HOST'], array($reurl['host'], 'www.'.$reurl['host']))) {

if(!in_array($reurl['host'], $_G['setting']['domain']['app']) && !isset($_G['setting']['domain']['list'][$reurl['host']])) {

$domainroot = substr($_SERVER['HTTP_HOST'], strpos($_SERVER['HTTP_HOST'], '.')+1);

if(is_array($_G['setting']['domain']['root']) && !in_array($domainroot, $_G['setting']['domain']['root'])) {

$_G['referer'] = $_G['setting']['domain']['defaultindex'] ? $_G['setting']['domain']['defaultindex'] : 'index.php';

}

}

} elseif(empty($reurl['host'])) {

$_G['referer'] = $_G['siteurl'].'./'.$_G['referer'];

}

return strip_tags($_G['referer']);

}

function ftpcmd($cmd, $arg1 = '') {

static $ftp;

$ftpon = getglobal('setting/ftp/on');

if(!$ftpon) {

return $cmd == 'error' ? -101 : 0;

} elseif($ftp == null) {

require_once libfile('class/ftp');

$ftp = & discuz_ftp::instance();

}

if(!$ftp->enabled) {

return $ftp->error();

} elseif($ftp->enabled && !$ftp->connectid) {

$ftp->connect();

}

switch ($cmd) {

case 'upload' : return $ftp->upload(getglobal('setting/attachdir').'/'.$arg1, $arg1); break;

case 'delete' : return $ftp->ftp_delete($arg1); break;

case 'close' : return $ftp->ftp_close(); break;

case 'error' : return $ftp->error(); break;

case 'object' : return $ftp; break;

default : return false;

}

}

function diconv($str, $in_charset, $out_charset = CHARSET, $ForceTable = FALSE) {

global $_G;

$in_charset = strtoupper($in_charset);

$out_charset = strtoupper($out_charset);

if(empty($str) || $in_charset == $out_charset) {

return $str;

}

$out = '';

if(!$ForceTable) {

if(function_exists('iconv')) {

$out = iconv($in_charset, $out_charset.'//IGNORE', $str);

} elseif(function_exists('mb_convert_encoding')) {

$out = mb_convert_encoding($str, $out_charset, $in_charset);

}

}

if($out == '') {

require_once libfile('class/chinese');

$chinese = new Chinese($in_charset, $out_charset, true);

$out = $chinese->Convert($str);

}

return $out;

}

function renum($array) {

$newnums = $nums = array();

foreach ($array as $id => $num) {

$newnums[$num][] = $id;

$nums[$num] = $num;

}

return array($nums, $newnums);

}

function getonlinenum($fid = 0, $tid = 0) {

if($fid) {

$sql = " AND fid='$fid'";

}

if($tid) {

$sql = " AND tid='$tid'";

}

return DB::result_first('SELECT count(*) FROM '.DB::table("common_session")." WHERE 1 $sql");

}

function sizecount($size) {

if($size >= 1073741824) {

$size = round($size / 1073741824 * 100) / 100 . ' GB';

} elseif($size >= 1048576) {

$size = round($size / 1048576 * 100) / 100 . ' MB';

} elseif($size >= 1024) {

$size = round($size / 1024 * 100) / 100 . ' KB';

} else {

$size = $size . ' Bytes';

}

return $size;

}

function swapclass($class1, $class2 = '') {

static $swapc = null;

$swapc = isset($swapc) && $swapc != $class1 ? $class1 : $class2;

return $swapc;

}

function writelog($file, $log) {

global $_G;

$yearmonth = dgmdate(TIMESTAMP, 'Ym', $_G['setting']['timeoffset']);

$logdir = DISCUZ_ROOT.'./data/log/';

$logfile = $logdir.$yearmonth.'_'.$file.'.php';

if(@filesize($logfile) > 2048000) {

$dir = opendir($logdir);

$length = strlen($file);

$maxid = $id = 0;

while($entry = readdir($dir)) {

if(strpos($entry, $yearmonth.'_'.$file) !== false) {

$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 getcolorpalette($colorid, $id, $background, $fun = '') {

return "";

}

function getstatus($status, $position) {

$t = $status & pow(2, $position - 1) ? 1 : 0;

return $t;

}

function setstatus($position, $value, $baseon = null) {

$t = pow(2, $position - 1);

if($value) {

$t = $baseon | $t;

} elseif ($baseon !== null) {

$t = $baseon & ~$t;

} else {

$t = ~$t;

}

return $t & 0xFFFF;

}

function notification_add($touid, $type, $note, $notevars = array(), $system = 0) {

global $_G;

$tospace = array('uid'=>$touid);

space_merge($tospace, 'field_home');

$filter = empty($tospace['privacy']['filter_note'])?array():array_keys($tospace['privacy']['filter_note']);

if($filter && (in_array($type.'|0', $filter) || in_array($type.'|'.$_G['uid'], $filter))) {

return false;

}

$notevars['actor'] = "

".$_G['member']['username']."";

if(!is_numeric($type)) {

$vars = explode(':', $note);

if(count($vars) == 2) {

$notestring = lang('plugin/'.$vars[0], $vars[1], $notevars);

} else {

$notestring = lang('notification', $note, $notevars);

}

$frommyapp = false;

} else {

$frommyapp = true;

$notestring = $note;

}

$oldnote = array();

if($notevars['from_id'] && $notevars['from_idtype']) {

$oldnote = DB::fetch_first("SELECT * FROM ".DB::table('home_notification')."

WHERE from_id='$notevars[from_id]' AND from_idtype='$notevars[from_idtype]' AND uid='$touid'");

}

if(empty($oldnote['from_num'])) $oldnote['from_num'] = 0;

$notevars['from_num'] = $notevars['from_num'] ? $notevars['from_num'] : 1;

$setarr = array(

'uid' => $touid,

'type' => $type,

'new' => 1,

'authorid' => $_G['uid'],

'author' => $_G['username'],

'note' => addslashes($notestring),

'dateline' => $_G['timestamp'],

'from_id' => $notevars['from_id'],

'from_idtype' => $notevars['from_idtype'],

'from_num' => ($oldnote['from_num']+$notevars['from_num'])

);

if($system) {

$setarr['authorid'] = 0;

$setarr['author'] = '';

}

if($oldnote['id']) {

DB::update('home_notification', $setarr, array('id'=>$oldnote['id']));

} else {

$oldnote['new'] = 0;

DB::insert('home_notification', $setarr);

}

if(empty($oldnote['new'])) {

DB::query("UPDATE ".DB::table('common_member')." SET newprompt=newprompt+1 WHERE uid='$touid'");

require_once libfile('function/mail');

$mail_subject = lang('notification', 'mail_to_user');

sendmail_touser($touid, $mail_subject, $notestring, $frommyapp ? 'myapp' : $type);

}

if(!$system && $_G['uid'] && $touid != $_G['uid']) {

DB::query("UPDATE ".DB::table('home_friend')." SET num=num+1 WHERE uid='$_G[uid]' AND fuid='$touid'");

}

}

function manage_addnotify($type, $from_num = 0, $langvar = array()) {

global $_G;

$notifyusers = unserialize($_G['setting']['notifyusers']);

$notifytypes = explode(',', $_G['setting']['adminnotifytypes']);

$notifytypes = array_flip($notifytypes);

$notearr = array('from_id' => 1,'from_idtype' => $type, 'from_num' => $from_num);

if($langvar) {

$langkey = $langvar['langkey'];

$notearr = array_merge($notearr, $langvar);

} else {

$langkey = 'manage_'.$type;

}

foreach($notifyusers as $uid => $user) {

if($user['types'][$notifytypes[$type]]) {

notification_add($uid, $type, $langkey, $notearr, 1);

}

}

}

function sendpm($toid, $subject, $message, $fromid = '', $replypmid = 0, $isusername = 0, $type = 0) {

global $_G;

if($fromid === '') {

$fromid = $_G['uid'];

}

loaducenter();

return uc_pm_send($fromid, $toid, $subject, $message, 1, $replypmid, $isusername, $type);

}

function g_icon($groupid, $return = 0) {

global $_G;

if(empty($_G['cache']['usergroups'][$groupid]['icon'])) {

$s = '';

} else {

if(substr($_G['cache']['usergroups'][$groupid]['icon'], 0, 5) == 'http:') {

$s = '';

} else {

$s = '';

}

}

if($return) {

return $s;

} else {

echo $s;

}

}

function updatediytemplate($targettplname = '') {

global $_G;

$r = false;

$where = empty($targettplname) ? '' : " WHERE targettplname='$targettplname'";

$query = DB::query("SELECT * FROM ".DB::table('common_diy_data')."$where");

require_once libfile('function/portalcp');

while($value = DB::fetch($query)) {

$r = save_diy_data($value['primaltplname'], $value['targettplname'], unserialize($value['diycontent']));

}

return $r;

}

function space_key($uid, $appid=0) {

global $_G;

$siteuniqueid = DB::result_first("SELECT svalue FROM ".DB::table('common_setting')." WHERE skey='siteuniqueid'");

return substr(md5($siteuniqueid.'|'.$uid.(empty($appid)?'':'|'.$appid)), 8, 16);

}

function getposttablebytid($tids, $primary = 0) {

global $_G;

$isstring = false;

if(!is_array($tids)) {

$tids = array(intval($tids));

$isstring = true;

}

$tids = array_unique($tids);

$tids = array_flip($tids);

if(!$primary) {

loadcache('threadtableids');

$threadtableids = !empty($_G['cache']['threadtableids']) ? $_G['cache']['threadtableids'] : array();

if(!in_array(0, $threadtableids)) {

$threadtableids = array_merge(array(0), $threadtableids);

}

} else {

$threadtableids = array(0);

}

$tables = array();

$posttable = '';

$singletable = count($tids) > 1 ? false : true;

foreach($threadtableids as $tableid) {

$threadtable = $tableid ? "forum_thread_$tableid" : 'forum_thread';

$query = DB::query("SELECT tid, posttableid FROM ".DB::table($threadtable)." WHERE tid IN(".dimplode(array_keys($tids)).")");

while ($value = DB::fetch($query)) {

$posttable = 'forum_post'.($value['posttableid'] ? "_$value[posttableid]" : '');

$tables[$posttable][$value['tid']] = $value['tid'];

unset($tids[$value['tid']]);

}

if(!count($tids)) {

break;

}

}

if(empty($posttable)) {

$posttable = 'forum_post';

$tables[$posttable] = array_flip($tids);

}

return $isstring ? $posttable : $tables;

}

function getposttable($tableid = 0, $prefix = false) {

global $_G;

$tableid = intval($tableid);

if($tableid) {

loadcache('posttableids');

$tableid = $_G['cache']['posttableids'] && in_array($tableid, $_G['cache']['posttableids']) ? $tableid : 0;

$tablename = 'forum_post'.($tableid ? "_$tableid" : '');

} else {

$tablename = 'forum_post';

}

if($prefix) {

$tablename = DB::table($tablename);

}

return $tablename;

}

function memory($cmd, $key='', $value='', $ttl = 0) {

$discuz = & chimicron_auto_core::instance();

if($cmd == 'check') {

return $discuz->mem->enable ? $discuz->mem->type : '';

} elseif($discuz->mem->enable && in_array($cmd, array('set', 'get', 'rm'))) {

switch ($cmd) {

case 'set': return $discuz->mem->set($key, $value, $ttl); break;

case 'get': return $discuz->mem->get($key); break;

case 'rm': return $discuz->mem->rm($key); break;

}

}

return null;

}

function ipaccess($ip, $accesslist) {

return preg_match("/^(".str_replace(array("\r\n", ' '), array('|', ''), preg_quote($accesslist, '/')).")/", $ip);

}

function ipbanned($onlineip) {

global $_G;

if($_G['setting']['ipaccess'] && !ipaccess($onlineip, $_G['setting']['ipaccess'])) {

return TRUE;

}

loadcache('ipbanned');

if(empty($_G['cache']['ipbanned'])) {

return FALSE;

} else {

if($_G['cache']['ipbanned']['expiration'] < TIMESTAMP) {

require_once libfile('function/cache');

updatecache('ipbanned');

}

return preg_match("/^(".$_G['cache']['ipbanned']['regexp'].")$/", $onlineip);

}

}

function getcount($tablename, $condition) {

if(empty($condition)) {

$where = '1';

} elseif(is_array($condition)) {

$where = DB::implode_field_value($condition, ' AND ');

} else {

$where = $condition;

}

$ret = intval(DB::result_first("SELECT COUNT(*) AS num FROM ".DB::table($tablename)." WHERE $where"));

return $ret;

}

function sysmessage($message) {

require libfile('function/sysmessage');

show_system_message($message);

}

function forumperm($permstr, $groupid = 0) {

global $_G;

$groupidarray = array($_G['groupid']);

if($groupid) {

return preg_match("/(^|\t)(".$groupid.")(\t|$)/", $permstr);

}

foreach(explode("\t", $_G['member']['extgroupids']) as $extgroupid) {

if($extgroupid = intval(trim($extgroupid))) {

$groupidarray[] = $extgroupid;

}

}

if($_G['setting']['verify']['enabled']) {

getuserprofile('verify1');

foreach($_G['setting']['verify'] as $vid => $verify) {

if($verify['available'] && $_G['member']['verify'.$vid] == 1) {

$groupidarray[] = 'v'.$vid;

}

}

}

return preg_match("/(^|\t)(".implode('|', $groupidarray).")(\t|$)/", $permstr);

}

if(!function_exists('file_put_contents')) {

if(!defined('FILE_APPEND')) define('FILE_APPEND', 8);

function file_put_contents($filename, $data, $flag = 0) {

$return = false;

if($fp = @fopen($filename, $flag != FILE_APPEND ? 'w' : 'a')) {

if($flag == LOCK_EX) @flock($fp, LOCK_EX);

$return = fwrite($fp, is_array($data) ? implode('', $data) : $data);

fclose($fp);

}

return $return;

}

}

function checkperm($perm) {

global $_G;

return (empty($_G['group'][$perm])?'':$_G['group'][$perm]);

}

function periodscheck($periods, $showmessage = 1) {

global $_G;

if(!$_G['group']['disableperiodctrl'] && $_G['setting'][$periods]) {

$now = dgmdate(TIMESTAMP, 'G.i');

foreach(explode("\r\n", str_replace(':', '.', $_G['setting'][$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", ', ', $_G['setting'][$periods]);

if($showmessage) {

showmessage('period_nopermission', NULL, array('banperiods' => $banperiods), array('login' => 1));

} else {

return TRUE;

}

}

}

}

return FALSE;

}

function cknewuser($return=0) {

global $_G;

$result = true;

if(!$_G['uid']) return true;

if(checkperm('disablepostctrl')) {

return $result;

}

$ckuser = $_G['member'];

if($_G['setting']['newbiespan'] && $_G['timestamp']-$ckuser['regdate']

if(empty($return)) showmessage('no_privilege_newbiespan', '', array('newbiespan' => $_G['setting']['newbiespan']), array('return' => true));

$result = false;

}

if($_G['setting']['need_avatar'] && empty($ckuser['avatarstatus'])) {

if(empty($return)) showmessage('no_privilege_avatar', '', array(), array('return' => true));

$result = false;

}

if($_G['setting']['need_email'] && empty($ckuser['emailstatus'])) {

if(empty($return)) showmessage('no_privilege_email', '', array(), array('return' => true));

$result = false;

}

if($_G['setting']['need_friendnum']) {

space_merge($ckuser, 'count');

if($ckuser['friends'] < $_G['setting']['need_friendnum']) {

if(empty($return)) showmessage('no_privilege_friendnum', '', array('friendnum' => $_G['setting']['need_friendnum']), array('return' => true));

$result = false;

}

}

return $result;

}

function manyoulog($logtype, $uids, $action, $fid = '') {

global $_G;

if($_G['setting']['my_app_status'] && $logtype == 'user') {

$action = daddslashes($action);

$values = array();

$uids = is_array($uids) ? $uids : array($uids);

foreach($uids as $uid) {

$uid = intval($uid);

$values[$uid] = "('$uid', '$action', '".TIMESTAMP."')";

}

if($values) {

DB::query("REPLACE INTO ".DB::table('common_member_log')." (`uid`, `action`, `dateline`) VALUES ".implode(',', $values));

}

}

}

function useractionlog($uid, $action) {

$uid = intval($uid);

if(empty($uid) || empty($action)) {

return false;

}

$action = getuseraction($action);

$timestamp = TIMESTAMP;

DB::query("INSERT INTO ".DB::table('common_member_action_log')." (`uid`, `action`, `dateline`) VALUES ('$uid', '$action', '$timestamp')");

return true;

}

function getuseraction($var) {

$value = false;

$ops = array('tid', 'pid', 'blogid', 'picid', 'doid', 'sid', 'aid', 'uid_cid', 'blogid_cid', 'sid_cid', 'picid_cid', 'aid_cid', 'topicid_cid');

if(is_numeric($var)) {

$value = isset($ops[$var]) ? $ops[$var] : false;

} else {

$value = array_search($var, $ops);

}

return $value;

}

function getuserapp($panel = 0) {

require_once libfile('function/manyou');

manyou_getuserapp($panel);

return true;

}

function getmyappiconpath($appid, $iconstatus=0) {

if($iconstatus > 0) {

return getglobal('setting/attachurl').'./'.'myapp/icon/'.$appid.'.jpg';

}

return 'http://appicon.manyou.com/icons/'.$appid;

}

function getexpiration() {

global $_G;

$date = getdate($_G['timestamp']);

return mktime(0, 0, 0, $date['mon'], $date['mday'], $date['year']) + 86400;

}

function return_bytes($val) {

$val = trim($val);

$last = strtolower($val{strlen($val)-1});

switch($last) {

case 'g': $val *= 1024;

case 'm': $val *= 1024;

case 'k': $val *= 1024;

}

return $val;

}

function get_url_list($message) {

$return = array();

(strpos($message, '[/img]') || strpos($message, '[/flash]')) && $message = preg_replace("/\[img[^\]]*\]\s*([^\[\

if(preg_match_all("/((https?|ftp|gopher|news|telnet|rtsp|mms|callto):\/\/|www\.)([a-z0-9\/\-_+=.~!%@?#%&;:$\\()|]+\s*)/i", $message, $urllist)) {

foreach($urllist[0] as $key => $val) {

$val = trim($val);

$return[0][$key] = $val;

if(!preg_match('/^http:\/\//is', $val)) $val = 'http://'.$val;

$tmp = parse_url($val);

$return[1][$key] = $tmp['host'];

if($tmp['port']){

$return[1][$key] .= ":$tmp[port]";

}

}

}

return $return;

}

function iswhitelist($host) {

global $_G;

static $iswhitelist = array();

if(isset($iswhitelist[$host])) {

return $iswhitelist[$host];

}

$hostlen = strlen($host);

$iswhitelist[$host] = false;

if(is_array($_G['cache']['domainwhitelist'])) foreach($_G['cache']['domainwhitelist'] as $val) {

$domainlen = strlen($val);

if($domainlen > $hostlen) {

continue;

}

if(substr($host, -$domainlen) == $val) {

$iswhitelist[$host] = true;

break;

}

}

if($iswhitelist[$host] == false) {

$iswhitelist[$host] = $host == $_SERVER['HTTP_HOST'];

}

return $iswhitelist[$host];

}

function update_template_block($targettplname, $blocks) {

if(!empty($blocks) && !empty($targettplname)) {

$oldbids = array();

$query = DB::query('SELECT bid FROM '.DB::table('common_template_block')." WHERE targettplname='$targettplname'");

while($value = DB::fetch($query)) {

$oldbids[] = $value['bid'];

}

$newaddbids = array_diff($blocks, $oldbids);

DB::delete('common_template_block', array('targettplname'=>$targettplname));

$blocks = array_unique($blocks);

$values = array();

foreach ($blocks as $bid) {

$values[] = "('$targettplname','$bid')";

}

if (!empty($values)) {

DB::query("INSERT INTO ".DB::table('common_template_block')." (targettplname,bid) VALUES ".implode(',', $values));

}

if(!empty($newaddbids)) {

require_once libfile('class/blockpermission');

$tplpermission = & template_permission::instance();

$tplpermission->add_blocks($targettplname, $newaddbids);

}

}

}

if(!function_exists('http_build_query')) {

function http_build_query($data, $numeric_prefix='', $arg_separator='', $prefix='') {

$render = array();

if (empty($arg_separator)) {

$arg_separator = ini_get('arg_separator.output');

empty($arg_separator) && $arg_separator = '&';

}

foreach ((array) $data as $key => $val) {

if (is_array($val) || is_object($val)) {

$_key = empty($prefix) ? "{$key}[%s]" : sprintf($prefix, $key) . "[%s]";

$_render = http_build_query($val, '', $arg_separator, $_key);

if (!empty($_render)) {

$render[] = $_render;

}

} else {

if (is_numeric($key) && empty($prefix)) {

$render[] = urlencode("{$numeric_prefix}{$key}") . "=" . urlencode($val);

} else {

if (!empty($prefix)) {

$_key = sprintf($prefix, $key);

$render[] = urlencode($_key) . "=" . urlencode($val);

} else {

$render[] = urlencode($key) . "=" . urlencode($val);

}

}

}

}

$render = implode($arg_separator, $render);

if (empty($render)) {

$render = '';

}

return $render;

}

}

function getrelatedlink($extent) {

global $_G;

loadcache('relatedlink');

$allextent = array('article' => 0, 'forum' => 1, 'group' => 2, 'blog' => 3);

$links = array();

if($_G['cache']['relatedlink'] && isset($allextent[$extent])) {

foreach($_G['cache']['relatedlink'] as $link) {

$link['extent'] = sprintf('%04b', $link['extent']);

if($link['extent'][$allextent[$extent]] && $link['name'] && $link['url']) {

$links[] = daddslashes($link);

}

}

}

return $links;

}

function getattachtablebyaid($aid) {

$tableid = DB::result_first("SELECT tableid FROM ".DB::table('forum_attachment')." WHERE aid='$aid'");

return 'forum_attachment_'.($tableid >= 0 && $tableid < 10 ? intval($tableid) : 'unused');

}

function getattachtableid($tid) {

$tid = (string)$tid;

return intval($tid{strlen($tid)-1});

}

function getattachtablebytid($tid) {

return 'forum_attachment_'.getattachtableid($tid);

}

function getattachtablebypid($pid) {

$tableid = DB::result_first("SELECT tableid FROM ".DB::table('forum_attachment')." WHERE pid='$pid' LIMIT 1");

return 'forum_attachment_'.($tableid >= 0 && $tableid < 10 ? intval($tableid) : 'unused');

}

function getattachnewaid($uid = 0) {

global $_G;

$uid = !$uid ? $_G['uid'] : $uid;

return DB::insert('forum_attachment', array('tid' => 0, 'pid' => 0, 'uid' => $uid, 'tableid' => 127), true);

}

function get_seosetting($page, $data = array(), $defset = array()) {

global $_G;

$searchs = array('{bbname}');

$replaces = array($_G['setting']['bbname']);

$seotitle = $seodescription = $seokeywords = '';

$titletext = $defset['seotitle'] ? $defset['seotitle'] : $_G['setting']['seotitle'][$page];

$descriptiontext = $defset['seodescription'] ? $defset['seodescription'] : $_G['setting']['seodescription'][$page];

$keywordstext = $defset['seokeywords'] ? $defset['seokeywords'] : $_G['setting']['seokeywords'][$page];

preg_match_all("/\{([a-z0-9_-]+?)\}/", $titletext.$descriptiontext.$keywordstext, $pageparams);

if($pageparams) {

foreach($pageparams[1] as $var) {

$searchs[] = '{'.$var.'}';

if($var == 'page') {

$data['page'] = $data['page'] > 1 ? lang('core', 'page', array('page' => $data['page'])) : '';

}

$replaces[] = $data[$var] ? strip_tags($data[$var]) : '';

}

if($titletext) {

$seotitle = strreplace_strip_split($searchs, $replaces, $titletext);

}

if($descriptiontext && (CURSCRIPT == 'forum' || IS_ROBOT || $_G['adminid'] == 1)) {

$seodescription = strreplace_strip_split($searchs, $replaces, $descriptiontext);

}

if($keywordstext && (CURSCRIPT == 'forum' || IS_ROBOT || $_G['adminid'] == 1)) {

$seokeywords = strreplace_strip_split($searchs, $replaces, $keywordstext);

}

}

return array($seotitle, $seodescription, $seokeywords);

}

function strreplace_strip_split($searchs, $replaces, $str) {

$searchspace = array('((\s*\-\s*)+)', '((\s*\,\s*)+)', '((\s*\|\s*)+)', '((\s*\t\s*)+)', '((\s*_\s*)+)');

$replacespace = array('-', ',', '|', ' ', '_');

return trim(preg_replace($searchspace, $replacespace, str_replace($searchs, $replaces, $str)), ' ,-|_');

}

function get_title_page($navtitle, $page){

if($page > 1) {

$navtitle .= ' - '.lang('core', 'page', array('page' => $page));

}

return $navtitle;

}

function getimgthumbname($fileStr, $extend='.thumb.jpg', $holdOldExt=true) {

if(empty($fileStr)) {

return '';

}

if(!$holdOldExt) {

$fileStr = substr($fileStr, 0, strrpos($fileStr, '.'));

}

$extend = strstr($extend, '.') ? $extend : '.'.$extend;

return $fileStr.$extend;

}

function updatemoderate($idtype, $ids, $status = 0) {

global $_G;

$ids = is_array($ids) ? $ids : array($ids);

if(!$ids) {

return;

}

if(!$status) {

foreach($ids as $id) {

DB::insert('common_moderate', array('id' => $id, 'idtype' => $idtype, 'status' => 0, 'dateline' => $_G['timestamp']), false, true);

}

} elseif($status == 1) {

DB::update('common_moderate', array('status' => 1), "id IN (".dimplode($ids).") AND idtype='$idtype'");

} elseif($status == 2) {

DB::delete('common_moderate', "id IN (".dimplode($ids).") AND idtype='$idtype'");

}

}

function userappprompt() {

global $_G;

if($_G['setting']['my_app_status'] && $_G['setting']['my_openappprompt'] && empty($_G['cookie']['userappprompt'])) {

$sid = $_G['setting']['my_siteid'];

$ts = $_G['timestamp'];

$key = md5($sid.$ts.$_G['setting']['my_sitekey']);

$uchId = $_G['uid'] ? $_G['uid'] : 0;

echo '';

}

}

?>

[从事多年的PHP开发,有许多针对php开发上的性能优化都需要注意的,或者是PHP小技巧都是可以提升php的性能,现在将平时总结出来的一些比较实用的提高php性能的方法做一下总

function core.php is missing,PHP代码相关推荐

  1. php function curl token_最全PHP代码规范

    FIG制定的 PHP 规范,简称 PSR,是 PHP 开发的事实标准.FIG 是 Framework Interoperability Group (框架可互用小组) 的缩写,由几位开源框架的开发者成 ...

  2. .net core ——利用 roslyn 编译C#代码

    Rosyln介绍 Rosyln1 是 .NET Core和 .NET 4.6+ 中 的C# .VB的编译器,宇宙最强IDE Visual Studio 也是使用其来编译代码的, 基于编译器也是服务的理 ...

  3. php fpm core,在php-fpm下,服务器间歇出现core dump 追踪到php代码是include一个php文件...

    服务器在间歇性的出现core dump: 于是有一下操作: gdb php-fpm -c core.10508 balabalabala (gdb) bt #0 0x00000000005d27f8 ...

  4. python function gamma_Python math gamma()用法及代码示例

    Python用其语言允许进行各种数学运算,这在科学领域具有多种应用.这样的Python产品之一就是内置的gamma()函数,该函数以数字方式计算函数中传递的数字的伽玛值. 用法:math.gamma( ...

  5. 为什么Note.js 里面没有sap.ui.core.Control.extend()这样的代码,但是runtime有自动生成有

    Sent: Wednesday, March 18, 2015 6:43 PM UI5 team的人写了一些Maven plugin,Maven build时,首先通过一个xslt在target fo ...

  6. 为什么你们的Note.js 里面没有sap.ui.core.Control.extend()这样的代码,但是runtime有自动生成有

    From: Wang, Jerry Sent: Wednesday, March 18, 2015 6:44 PM Subject: RE: 另一种方法做本地reuse library的开发 UI5 ...

  7. 基于 abp vNext 和 .NET Core 开发博客项目 - 数据访问和代码优先

    基于 abp vNext 和 .NET Core 开发博客项目 - 数据访问和代码优先 转载于:https://github.com/Meowv/Blog 本篇主要使用Entity Framework ...

  8. [Cocoa]深入浅出 Cocoa 之 Core Data(2)- 手动编写代码

    深入浅出 Cocoa 之 Core Data(2)- 代码示例 罗朝辉(http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 前面 详细讲解了 Core Data 的 ...

  9. Entity Framework Core 2.0 使用代码进行自动迁移

    一.前言 我们在使用EF进行开发的时候,肯定会遇到将迁移更新到生产数据库这个问题,前面写了一篇文章介绍了Entity Framework Core 2.0的入门使用,这里面介绍了使用命令生成迁移所需的 ...

最新文章

  1. AndroidManifest.xml文件详解
  2. Linear regression with one variable算法实例讲解(绘制图像,cost_Function ,Gradient Desent, 拟合曲线, 轮廓图绘制)_矩阵操作...
  3. 【Spring注解系列07】Spring注入Bean有哪些方式总结
  4. Python_列表常用操作
  5. Exynos4412 内核移植(三)—— 内核启动过程分析
  6. php xml数据拼接,在PHP中合并XML文件
  7. python达梦数据库_python 操作达 梦数据库
  8. 课程设计:大学生信息管理系统
  9. 14.为主题配置图片性能
  10. 把word excel ppt 导入到右键快捷菜单中
  11. PPT扩展展示时,PPT展示界面背景色有时候突然变成黑底?如何解决?
  12. 华为USG6000V防火墙的初始密码及修改密码的操作
  13. 思岚激光雷达rplidar从ROS 1到ROS 2的移植
  14. c语言中立方和乘法怎么表示什么区别,C语言程式设计中的平方立方怎么表示
  15. TouchGFX如何校准电阻触摸屏
  16. 计算机win10无法打开小键盘,win10系统下小键盘数字键不能用怎么办_win10电脑小键盘数字键不能用如何解决...
  17. 年薪15万的80后小本科:只要6分钟,告诉你少走6年弯路
  18. 企业微信批量导入用户
  19. 中关村e谷为产业搭台:中关村论坛(空天专场)黑科技亮相现场
  20. UiBot 邮件附件

热门文章

  1. 干货!Python与MySQL数据库的交互实战
  2. 小米回应暴力裁员;报告称安卓手机贬值速度是 iPhone 两倍;Ant Design 4.0.1 发布| 极客头条...
  3. 阿里平头哥研发专用 SoC 芯片;部分 MacBook Pro 被禁止上飞机;VS Code 1.37 发布 | 极客头条...
  4. Facebook 发币 Libra;谷歌十亿美金为穷人造房;第四代树莓派 Raspberry Pi 4 发布 | 开发者周刊...
  5. 苹果春季发布会已开启直播;滴滴回应网约车司机被害​;微软Chromium内核浏览器曝光 | 极客头条...
  6. 网易考拉的服务架构如何从单体应用走向微服务化? | 技术头条
  7. 如何设计可自学习的五子棋 AI?
  8. Google 又又又要“重回中国”了?
  9. 中兴有救了!百度又要 All in 视频?联想回应“反对预装国产系统” | CSDN极客头条...
  10. 甲骨文被曝服务器漏洞,攻击者窃获 22.6 万美元加密货币