<?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') . "<br>\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, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) { 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 <$len; $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<$onlinehold "; $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<".time()); 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 /** * [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 : '<img src="'.$ucenterurl.'/avatar.php?uid='.$uid.'&size='.$size.($real ? '&type=real' : '').'" />'; } 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 : '<img src="'.$file.'" onerror="this.onerror=null;this.src=\''.$ucenterurl.'/images/noavatar_'.$size.'.gif\'" />'; } } 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 '<span title="'.$s.'">'.intval($time / 3600).' '.$lang['hour'].$lang['before'].'</span>'; } elseif($time > 1800) { return '<span title="'.$s.'">'.$lang['half'].$lang['hour'].$lang['before'].'</span>'; } elseif($time > 60) { return '<span title="'.$s.'">'.intval($time / 60).' '.$lang['min'].$lang['before'].'</span>'; } elseif($time > 0) { return '<span title="'.$s.'">'.$time.' '.$lang['sec'].$lang['before'].'</span>'; } elseif($time == 0) { return '<span title="'.$s.'">'.$lang['now'].'</span>'; } else { return $s; } } elseif(($days = intval(($todaytimestamp - $timestamp) / 86400)) >= 0 && $days < 7) { if($days == 0) { return '<span title="'.$s.'">'.$lang['yday'].' '.gmdate($tformat, $timestamp).'</span>'; } elseif($days == 1) { return '<span title="'.$s.'">'.$lang['byday'].' '.gmdate($tformat, $timestamp).'</span>'; } else { return '<span title="'.$s.'">'.($days + 1).' '.$lang['day'].$lang['before'].'</span>'; } } 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, $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, $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 '<a href="'.$host.$href.'"'.(!empty($extra) ? stripslashes($extra) : '').'>'; } 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 '<pre>'; 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 = '<div'.($params[1] != '' ? ' class="'.$params[1].'"' : '').$extra.'>'.$adcode.'</div>'; } 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 ? '<a href="'.$mpurl.'page=1'.$a_name.'" class="first"'.$ajaxtarget.'>1 '.$dot.'</a>' : ''). ($curpage > 1 && !$simple ? '<a href="'.$mpurl.'page='.($curpage - 1).$a_name.'" class="prev"'.$ajaxtarget.'>'.$lang['prev'].'</a>' : ''); for($i = $from; $i <= $to; $i++) { $multipage .= $i == $curpage ? '<strong>'.$i.'</strong>' : '<a href="'.$mpurl.'page='.$i.($ajaxtarget && $i == $pages && $autogoto ? '#' : $a_name).'"'.$ajaxtarget.'>'.$i.'</a>'; } $multipage .= ($to < $pages ? '<a href="'.$mpurl.'page='.$pages.$a_name.'" class="last"'.$ajaxtarget.'>'.$dot.' '.$realpages.'</a>' : ''). ($curpage < $pages && !$simple ? '<a href="'.$mpurl.'page='.($curpage + 1).$a_name.'" class="nxt"'.$ajaxtarget.'>'.$lang['next'].'</a>' : ''). ($showkbd && !$simple && $pages > $page && !$ajaxtarget ? '<kbd><input type="text" name="custompage" size="3" onkeydown="if(event.keyCode==13) {window.location=\''.$mpurl.'page=\'+this.value; doane(event);}" /></kbd>' : ''); $multipage = $multipage ? '<div class="pg">'.($shownum && !$simple ? '<em> '.$num.' </em>' : '').$multipage.'</div>' : ''; } $maxpage = $realpages; return $multipage; } function simplepage($num, $perpage, $curpage, $mpurl) { $return = ''; $lang['next'] = lang('core', 'nextpage'); $lang['prev'] = lang('core', 'prevpage'); $next = $num == $perpage ? '<a href="'.$mpurl.'&page='.($curpage + 1).'" class="nxt">'.$lang['next'].'</a>' : ''; $prev = $curpage > 1 ? '<span class="pgb"><a href="'.$mpurl.'&page='.($curpage - 1).'">'.$lang['prev'].'</a></span>' : ''; if($next || $prev) { $return = '<div class="pg">'.$prev.$next.'</div>'; } 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 "<input id=\"c$colorid\" onclick=\"c{$colorid}_frame.location='static/image/admincp/getcolor.htm?c{$colorid}|{$id}|{$fun}';showMenu({'ctrlid':'c$colorid'})\" type=\"button\" class=\"colorwd\" value=\"\" style=\"background: $background\"><span id=\"c{$colorid}_menu\" style=\"display: none\"><iframe name=\"c{$colorid}_frame\" src=\"\" frameborder=\"0\" width=\"210\" height=\"148\" scrolling=\"no\"></iframe></span>"; } 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'] = "<a href=\"home.php?mod=space&uid=$_G[uid]\">".$_G['member']['username']."</a>"; 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 = '<img src="'.$_G['cache']['usergroups'][$groupid]['icon'].'" alt="" class="vm" />'; } else { $s = '<img src="'.$_G['setting']['attachurl'].'common/'.$_G['cache']['usergroups'][$groupid]['icon'].'" alt="" class="vm" />'; } } 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']<$_G['setting']['newbiespan']*60) { 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*([^\[\<\r\n]+?)\s*\[\/img\]|\[flash[^\]]*\]\s*([^\[\<\r\n]+?)\s*\[\/flash\]/is", '', $message); 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 '<script type="text/javascript" src="http://notice.uchome.manyou.com/notice/userNotice?sId='.$sid.'&ts='.$ts.'&key='.$key.'&uchId='.$uchId.'" charset="UTF-8"></script>'; } } ?>
相关推荐
【PHP代码编写器】是一种专为开发人员设计的软件工具,它支持PHP语言以及其它如Java等编程语言的编写工作。作为一个高效的代码编辑环境,它提供了丰富的特性来提高开发效率和代码质量。在PHP开发中,一个良好的代码...
《PHP 代码审计入坑实践》是一篇针对初学者的指南,旨在介绍如何开始进行PHP代码的安全审计。本文主要利用了RIPS等工具,通过实际操作来帮助新手逐步理解代码审计的过程。 首先,文章提到了“场景”,这可能是指...
《易语言PHP代码翻译器源码解析与应用探讨》 在IT行业中,代码翻译器扮演着重要的角色,它能够帮助开发者理解和转化不同编程语言之间的代码,从而提高开发效率和跨平台兼容性。本文将深入探讨易语言PHP代码翻译器...
第19课:PHP代码审计之会话认证漏洞mp4 第18课:PHP伪协议mp4 第17课:PHP弱类型mp4 第16课:PHP代码审计之反序列化漏润mp4 第15课:PHP代码审计之变量盖漏洞mp4 第14课PHP代码审计之任意文件读取及删除漏洞mp4 第13课...
"PHP加密软件"和"PHP代码加密"就是针对这一需求提出的解决方案,旨在保护源代码不被未经授权的人查看、复制或修改,确保商业机密和知识产权的安全。 PHP加密技术主要有以下几种形式: 1. **源代码混淆**:这是最...
然而,有时我们可能需要处理加密或混淆的PHP代码,这时就需要借助PHP代码解密工具来帮助我们理解或修改这些代码。以下是三款测试可用的PHP代码解密工具的详细介绍,以及如何使用它们的相关知识点。 1. 黑刀dezender...
"PHP代码加密器"就是为了应对这一挑战而存在的工具。它能够将源代码转换为不可读的形式,从而保护开发者的心血不被轻易窃取或滥用。 1. **代码加密原理**: PHP代码加密通常基于混淆、编码转换、解密运行等技术。...
"ASP代码转PHP代码V1.0"是一款工具,其主要功能是帮助开发者将原有的ASP代码快速地转换为PHP代码,以适应项目从ASP平台向PHP平台迁移的需求。 【ASP与PHP的差异】 1. **语法差异**:ASP主要基于VBScript或JScript...
《PHP精粹 编写高效PHP代码》这本书是PHP开发者的重要参考资料,旨在帮助读者提升PHP编程技巧,优化代码性能,从而编写出更高效、更可靠的PHP应用。在深入理解PHP语言特性和最佳实践的基础上,我们可以从以下几个...
PHP 代码生成器是一种工具,它可以帮助开发者自动化创建常见的PHP代码结构,从而节省时间和提高开发效率。对于新手来说,这是一个非常实用的学习资源,因为它们通常需要花费大量时间编写基础代码,如数据库连接、...
ASP/PHP代码生成器是一款专为ASPPHP程序员设计的工具,旨在提高开发效率和减少重复劳动。这个软件能够自动生成常见的ASP或PHP代码,帮助程序员快速构建网站应用的基础架构,从而将更多精力集中在业务逻辑和创新功能...
这款名为“ASP PHP代码生成器V1.1”的工具,旨在为中国的ASP和PHP程序员提供便利,帮助他们快速生成代码,提高开发效率。 首先,我们来了解一下ASP。ASP是基于.NET Framework的,它允许开发者使用多种编程语言(如...
php 代码统计插件"是专为这两种语言设计的一款工具,用于自动化代码统计过程。 在Eclipse集成开发环境中,`tk.eclipse.plugin.stepcounter`可能是一个插件,它能够集成到IDE中,提供实时的代码统计功能。这个插件...
当我们谈论"PHP代码优化"时,我们实际上是指通过一系列技术和策略来提高代码的执行效率,减少资源消耗,并提高程序的可读性和可维护性。代码优化是软件开发过程中的重要环节,对于大型项目而言更是必不可少。 首先...
【PHP代码解密软件Dezend】是一款专门针对PHP代码加密技术的解密工具,它能够有效地帮助开发者批量处理加密的PHP代码,恢复源代码的可读性。在PHP开发环境中,有时为了保护知识产权或者增强代码安全性,开发者会采用...
**PHPStorm:强大的PHP代码编辑神器** PHPStorm是一款由JetBrains公司推出的专为PHP开发者设计的集成开发环境(IDE)。这款强大的工具以其丰富的功能、高效的工作流和对PHP语法的深度理解,深受广大PHP程序员的喜爱...
"易语言源码易语言PHP代码翻译器源码.rar"是一个包含易语言实现的PHP代码翻译器的源码包,这为我们提供了一个将PHP代码转换为易语言代码的工具。 这个源码包的核心在于代码翻译机制,它涉及到两个主要的编程领域的...
PHP代码审计工具V2.0.3源码 源码描述: 该版本目前支持单个关键字扫描、批量函数扫描、批量正则匹配,其中正则表达式扫描精确度最高,效率最高。 其他功能: 源码浏览:载入程序源码后,可以在最左边的程序文件...
标题中的“加密优化Linux下的PHP代码”指的是在Linux操作系统环境下,对PHP代码进行加密和优化以提高代码的安全性和性能。这种做法通常是为了防止未经授权的修改或盗窃,保护开发者的工作成果。 描述中的“加密”...
代码审计是确保软件质量和安全性的关键步骤,对于PHP开发者来说,掌握PHP代码审计技巧至关重要。这份“PHP代码审计入门笔记”正是为了帮助初学者进入这个领域而准备的。 PHP代码审计涉及对已编写或第三方提供的PHP...