$name) { if(!is_int($key)) { $name = $key; } B($name, $params); } if(APP_DEBUG) { trace('[ '.$tag.' ] --END-- [ RunTime:'.G($tag.'Start',$tag.'End',6).'s ]','','INFO'); } }else{ return false; } } function add_tag_behavior($tag,$behavior,$path='') { $array = C('tags.'.$tag); if(!$array) { $array = array(); } if($path) { $array[$behavior] = $path; }else{ $array[] = $behavior; } C('tags.'.$tag,$array); } function filter($name, &$content) { $class = $name . 'Filter'; require_cache(LIB_PATH . 'Filter/' . $class . '.class.php'); $filter = new $class(); $content = $filter->run($content); } function B($name, &$params=NULL) { $class = $name.'Behavior'; G('behaviorStart'); $behavior = new $class(); $behavior->run($params); if(APP_DEBUG) { trace('Run '.$name.' Behavior [ RunTime:'.G('behaviorStart','behaviorEnd',6).'s ]','','INFO'); } } function W($name, $data=array(), $return=false) { $class = $name . 'Widget'; require_cache(LIB_PATH . 'Widget/' . $class . '.class.php'); if (!class_exists($class)) throw_exception(L('_CLASS_NOT_EXIST_') . ':' . $class); $widget = Think::instance($class); $content = $widget->render($data); if ($return) return $content; else echo $content; } function strip_whitespace($content) { $stripStr = ''; $tokens = token_get_all($content); $last_space = false; for ($i = 0, $j = count($tokens); $i < $j; $i++) { if (is_string($tokens[$i])) { $last_space = false; $stripStr .= $tokens[$i]; } else { switch ($tokens[$i][0]) { case T_COMMENT: case T_DOC_COMMENT: break; case T_WHITESPACE: if (!$last_space) { $stripStr .= ' '; $last_space = true; } break; case T_START_HEREDOC: $stripStr .= "<<__toString()); } static public function appError($errno, $errstr, $errfile, $errline) { switch ($errno) { case E_ERROR: case E_PARSE: case E_CORE_ERROR: case E_COMPILE_ERROR: case E_USER_ERROR: ob_end_clean(); if(C('OUTPUT_ENCODE')){ $zlib = ini_get('zlib.output_compression'); if(empty($zlib)) ob_start('ob_gzhandler'); } $errorStr = "$errstr ".$errfile." 第 $errline 行."; if(C('LOG_RECORD')) Log::write("[$errno] ".$errorStr,Log::ERR); function_exists('halt')?halt($errorStr):exit('ERROR:'.$errorStr); break; case E_STRICT: case E_USER_WARNING: case E_USER_NOTICE: default: $errorStr = "[$errno] $errstr ".$errfile." 第 $errline 行."; trace($errorStr,'','NOTIC'); break; } } static public function fatalError() { if ($e = error_get_last()) { Think::appError($e['type'],$e['message'],$e['file'],$e['line']); } } } class ThinkException extends Exception { private $type; private $extra; public function __construct($message,$code=0,$extra=false) { parent::__construct($message,$code); $this->type = get_class($this); $this->extra = $extra; } public function __toString() { $trace = $this->getTrace(); if($this->extra) array_shift($trace); $this->class = isset($trace[0]['class'])?$trace[0]['class']:''; $this->function = isset($trace[0]['function'])?$trace[0]['function']:''; $this->file = $trace[0]['file']; $this->line = $trace[0]['line']; $file = file($this->file); $traceInfo = ''; $time = date('y-m-d H:i:m'); foreach($trace as $t) { $traceInfo .= '['.$time.'] '.$t['file'].' ('.$t['line'].') '; $traceInfo .= $t['class'].$t['type'].$t['function'].'('; $traceInfo .= implode(', ', $t['args']); $traceInfo .=")\n"; } $error['message'] = $this->message; $error['type'] = $this->type; $error['detail'] = L('_MODULE_').'['.MODULE_NAME.'] '.L('_ACTION_').'['.ACTION_NAME.']'."\n"; $error['detail'] .= ($this->line-2).': '.$file[$this->line-3]; $error['detail'] .= ($this->line-1).': '.$file[$this->line-2]; $error['detail'] .= ''.($this->line).': '.$file[$this->line-1].''; $error['detail'] .= ($this->line+1).': '.$file[$this->line]; $error['detail'] .= ($this->line+2).': '.$file[$this->line+1]; $error['class'] = $this->class; $error['function'] = $this->function; $error['file'] = $this->file; $error['line'] = $this->line; $error['trace'] = $traceInfo; if(C('LOG_EXCEPTION_RECORD')) { Log::Write('('.$this->type.') '.$this->message); } return $error ; } } abstract class Behavior { protected $options = array(); public function __construct() { if(!empty($this->options)) { foreach ($this->options as $name=>$val){ if(NULL !== C($name)) { $this->options[$name] = C($name); }else{ C($name,$val); } } array_change_key_case($this->options); } } public function __get($name){ return $this->options[strtolower($name)]; } abstract public function run(&$params); } defined('THINK_PATH') or exit(); class ReadHtmlCacheBehavior extends Behavior { protected $options = array( 'HTML_CACHE_ON' => false, 'HTML_CACHE_TIME' => 60, 'HTML_CACHE_RULES' => array(), 'HTML_FILE_SUFFIX' => '.html', ); public function run(&$params){ if(C('HTML_CACHE_ON')) { $cacheTime = $this->requireHtmlCache(); if( false !== $cacheTime && $this->checkHTMLCache(HTML_FILE_NAME,$cacheTime)) { readfile(HTML_FILE_NAME); exit(); } } } static private function requireHtmlCache() { $htmls = C('HTML_CACHE_RULES'); if(!empty($htmls)) { $htmls = array_change_key_case($htmls); $moduleName = strtolower(MODULE_NAME); $actionName = strtolower(ACTION_NAME); if(isset($htmls[$moduleName.':'.$actionName])) { $html = $htmls[$moduleName.':'.$actionName]; }elseif(isset($htmls[$moduleName.':'])){ $html = $htmls[$moduleName.':']; }elseif(isset($htmls[$actionName])){ $html = $htmls[$actionName]; }elseif(isset($htmls['*'])){ $html = $htmls['*']; }elseif(isset($htmls['empty:index']) && !class_exists(MODULE_NAME.'Action')){ $html = $htmls['empty:index']; }elseif(isset($htmls[$moduleName.':_empty']) && $this->isEmptyAction(MODULE_NAME,ACTION_NAME)){ $html = $htmls[$moduleName.':_empty']; } if(!empty($html)) { $rule = $html[0]; $rule = preg_replace('/{\$(_\w+)\.(\w+)\|(\w+)}/e',"\\3(\$\\1['\\2'])",$rule); $rule = preg_replace('/{\$(_\w+)\.(\w+)}/e',"\$\\1['\\2']",$rule); $rule = preg_replace('/{(\w+)\|(\w+)}/e',"\\2(\$_GET['\\1'])",$rule); $rule = preg_replace('/{(\w+)}/e',"\$_GET['\\1']",$rule); $rule = str_ireplace( array('{:app}','{:module}','{:action}','{:group}'), array(APP_NAME,MODULE_NAME,ACTION_NAME,defined('GROUP_NAME')?GROUP_NAME:''), $rule); $rule = preg_replace('/{|(\w+)}/e',"\\1()",$rule); if(!empty($html[2])) $rule = $html[2]($rule); $cacheTime = isset($html[1])?$html[1]:C('HTML_CACHE_TIME'); define('HTML_FILE_NAME',HTML_PATH . $rule.C('HTML_FILE_SUFFIX')); return $cacheTime; } } return false; } static public function checkHTMLCache($cacheFile='',$cacheTime='') { if(!is_file($cacheFile)){ return false; }elseif (filemtime(C('TEMPLATE_NAME')) > filemtime($cacheFile)) { return false; }elseif(!is_numeric($cacheTime) && function_exists($cacheTime)){ return $cacheTime($cacheFile); }elseif ($cacheTime != 0 && NOW_TIME > filemtime($cacheFile)+$cacheTime) { return false; } return true; } static private function isEmptyAction($module,$action) { $className = $module.'Action'; $class = new $className; return !method_exists($class,$action); } } defined('THINK_PATH') or exit(); class CheckRouteBehavior extends Behavior { protected $options = array( 'URL_ROUTER_ON' => false, 'URL_ROUTE_RULES' => array(), ); public function run(&$return){ $regx = trim($_SERVER['PATH_INFO'],'/'); if(empty($regx)) return $return = true; if(!C('URL_ROUTER_ON')) return $return = false; $routes = C('URL_ROUTE_RULES'); if(!empty($routes)) { $depr = C('URL_PATHINFO_DEPR'); $regx = str_replace($depr,'/',$regx); foreach ($routes as $rule=>$route){ if(0===strpos($rule,'/') && preg_match($rule,$regx,$matches)) { return $return = $this->parseRegex($matches,$route,$regx); }else{ $len1 = substr_count($regx,'/'); $len2 = substr_count($rule,'/'); if($len1>=$len2) { if('$' == substr($rule,-1,1)) { if($len1 != $len2) { continue; }else{ $rule = substr($rule,0,-1); } } $match = $this->checkUrlMatch($regx,$rule); if($match) return $return = $this->parseRule($rule,$route,$regx); } } } } $return = false; } private function checkUrlMatch($regx,$rule) { $m1 = explode('/',$regx); $m2 = explode('/',$rule); $match = true; foreach ($m2 as $key=>$val){ if(':' == substr($val,0,1)) { if(strpos($val,'\\')) { $type = substr($val,-1); if('d'==$type && !is_numeric($m1[$key])) { $match = false; break; } }elseif(strpos($val,'^')){ $array = explode('|',substr(strstr($val,'^'),1)); if(in_array($m1[$key],$array)) { $match = false; break; } } }elseif(0 !== strcasecmp($val,$m1[$key])){ $match = false; break; } } return $match; } private function parseUrl($url) { $var = array(); if(false !== strpos($url,'?')) { $info = parse_url($url); $path = explode('/',$info['path']); parse_str($info['query'],$var); }elseif(strpos($url,'/')){ $path = explode('/',$url); }else{ parse_str($url,$var); } if(isset($path)) { $var[C('VAR_ACTION')] = array_pop($path); if(!empty($path)) { $var[C('VAR_MODULE')] = array_pop($path); } if(!empty($path)) { $var[C('VAR_GROUP')] = array_pop($path); } } return $var; } private function parseRule($rule,$route,$regx) { $url = is_array($route)?$route[0]:$route; $paths = explode('/',$regx); $matches = array(); $rule = explode('/',$rule); foreach ($rule as $item){ if(0===strpos($item,':')) { if($pos = strpos($item,'^') ) { $var = substr($item,1,$pos-1); }elseif(strpos($item,'\\')){ $var = substr($item,1,-2); }else{ $var = substr($item,1); } $matches[$var] = array_shift($paths); }else{ array_shift($paths); } } if(0=== strpos($url,'/') || 0===strpos($url,'http')) { if(strpos($url,':')) { $values = array_values($matches); $url = preg_replace('/:(\d+)/e','$values[\\1-1]',$url); } header("Location: $url", true,(is_array($route) && isset($route[1]))?$route[1]:301); exit; }else{ $var = $this->parseUrl($url); $values = array_values($matches); foreach ($var as $key=>$val){ if(0===strpos($val,':')) { $var[$key] = $values[substr($val,1)-1]; } } $var = array_merge($matches,$var); if($paths) { preg_replace('@(\w+)\/([^\/]+)@e', '$var[strtolower(\'\\1\')]=strip_tags(\'\\2\');', implode('/',$paths)); } if(is_array($route) && isset($route[1])) { parse_str($route[1],$params); $var = array_merge($var,$params); } $_GET = array_merge($var,$_GET); } return true; } private function parseRegex($matches,$route,$regx) { $url = is_array($route)?$route[0]:$route; $url = preg_replace('/:(\d+)/e','$matches[\\1]',$url); if(0=== strpos($url,'/') || 0===strpos($url,'http')) { header("Location: $url", true,(is_array($route) && isset($route[1]))?$route[1]:301); exit; }else{ $var = $this->parseUrl($url); $regx = substr_replace($regx,'',0,strlen($matches[0])); if($regx) { preg_replace('@(\w+)\/([^,\/]+)@e', '$var[strtolower(\'\\1\')]=strip_tags(\'\\2\');', $regx); } if(is_array($route) && isset($route[1])) { parse_str($route[1],$params); $var = array_merge($var,$params); } $_GET = array_merge($var,$_GET); } return true; } } defined('THINK_PATH') or exit(); class LocationTemplateBehavior extends Behavior { public function run(&$templateFile){ if(!file_exists_case($templateFile)) $templateFile = $this->parseTemplateFile($templateFile); } private function parseTemplateFile($templateFile) { if(''==$templateFile) { $templateFile = C('TEMPLATE_NAME'); }elseif(false === strpos($templateFile,C('TMPL_TEMPLATE_SUFFIX'))){ $path = explode(':',$templateFile); $action = array_pop($path); $module = !empty($path)?array_pop($path):MODULE_NAME; if(!empty($path)) { $path = dirname(THEME_PATH).'/'.array_pop($path).'/'; }else{ $path = THEME_PATH; } $depr = defined('GROUP_NAME')?C('TMPL_FILE_DEPR'):'/'; $templateFile = $path.$module.$depr.$action.C('TMPL_TEMPLATE_SUFFIX'); } if(!file_exists_case($templateFile)) throw_exception(L('_TEMPLATE_NOT_EXIST_').'['.$templateFile.']'); return $templateFile; } } defined('THINK_PATH') or exit(); class ParseTemplateBehavior extends Behavior { protected $options = array( 'TMPL_ENGINE_TYPE' => 'Think', 'TMPL_CACHFILE_SUFFIX' => '.php', 'TMPL_DENY_FUNC_LIST' => 'echo,exit', 'TMPL_DENY_PHP' => false, 'TMPL_L_DELIM' => '{', 'TMPL_R_DELIM' => '}', 'TMPL_VAR_IDENTIFY' => 'array', 'TMPL_STRIP_SPACE' => true, 'TMPL_CACHE_ON' => true, 'TMPL_CACHE_PREFIX' => '', 'TMPL_CACHE_TIME' => 0, 'TMPL_LAYOUT_ITEM' => '{__CONTENT__}', 'LAYOUT_ON' => false, 'LAYOUT_NAME' => 'layout', 'TAGLIB_BEGIN' => '<', 'TAGLIB_END' => '>', 'TAGLIB_LOAD' => true, 'TAGLIB_BUILD_IN' => 'cx', 'TAGLIB_PRE_LOAD' => '', ); public function run(&$_data){ $engine = strtolower(C('TMPL_ENGINE_TYPE')); $_content = empty($_data['content'])?$_data['file']:$_data['content']; $_data['prefix'] = !empty($_data['prefix'])?$_data['prefix']:C('TMPL_CACHE_PREFIX'); if('think'==$engine){ if(empty($_data['content']) && $this->checkCache($_data['file'],$_data['prefix'])) { extract($_data['var'], EXTR_OVERWRITE); include C('CACHE_PATH').$_data['prefix'].md5($_content).C('TMPL_CACHFILE_SUFFIX'); }else{ $tpl = Think::instance('ThinkTemplate'); $tpl->fetch($_content,$_data['var'],$_data['prefix']); } }else{ $class = 'Template'.ucwords($engine); if(is_file(CORE_PATH.'Driver/Template/'.$class.'.class.php')) { $path = CORE_PATH; }else{ $path = EXTEND_PATH; } if(require_cache($path.'Driver/Template/'.$class.'.class.php')) { $tpl = new $class; $tpl->fetch($_content,$_data['var']); }else { throw_exception(L('_NOT_SUPPERT_').': ' . $class); } } } protected function checkCache($tmplTemplateFile,$prefix='') { if (!C('TMPL_CACHE_ON')) return false; $tmplCacheFile = C('CACHE_PATH').$prefix.md5($tmplTemplateFile).C('TMPL_CACHFILE_SUFFIX'); if(!is_file($tmplCacheFile)){ return false; }elseif (filemtime($tmplTemplateFile) > filemtime($tmplCacheFile)) { return false; }elseif (C('TMPL_CACHE_TIME') != 0 && time() > filemtime($tmplCacheFile)+C('TMPL_CACHE_TIME')) { return false; } if(C('LAYOUT_ON')) { $layoutFile = THEME_PATH.C('LAYOUT_NAME').C('TMPL_TEMPLATE_SUFFIX'); if(filemtime($layoutFile) > filemtime($tmplCacheFile)) { return false; } } return true; } } defined('THINK_PATH') or exit(); class ContentReplaceBehavior extends Behavior { protected $options = array( 'TMPL_PARSE_STRING' => array(), ); public function run(&$content){ $content = $this->templateContentReplace($content); } protected function templateContentReplace($content) { $replace = array( '__TMPL__' => APP_TMPL_PATH, '__ROOT__' => __ROOT__, '__APP__' => __APP__, '__GROUP__' => defined('GROUP_NAME')?__GROUP__:__APP__, '__ACTION__' => __ACTION__, '__SELF__' => __SELF__, '__URL__' => __URL__, '../Public' => APP_TMPL_PATH.'Public', '__PUBLIC__' => __ROOT__.'/Public', '__PUBLIC_TPL__' => APP_TMPL_PATH.'Public', ); if(is_array(C('TMPL_PARSE_STRING')) ) $replace = array_merge($replace,C('TMPL_PARSE_STRING')); $content = str_replace(array_keys($replace),array_values($replace),$content); return $content; } } defined('THINK_PATH') or exit(); class TokenBuildBehavior extends Behavior { protected $options = array( 'TOKEN_ON' => false, 'TOKEN_NAME' => '__hash__', 'TOKEN_TYPE' => 'md5', 'TOKEN_RESET' => true, ); public function run(&$content){ if(C('TOKEN_ON')) { if(strpos($content,'{__TOKEN__}')) { $content = str_replace('{__TOKEN__}',$this->buildToken(),$content); }elseif(preg_match('/<\/form(\s*)>/is',$content,$match)) { $content = str_replace($match[0],$this->buildToken().$match[0],$content); } }else{ $content = str_replace('{__TOKEN__}','',$content); } } private function buildToken() { $tokenName = C('TOKEN_NAME'); $tokenType = C('TOKEN_TYPE'); if(!isset($_SESSION[$tokenName])) { $_SESSION[$tokenName] = array(); } $tokenKey = md5($_SERVER['REQUEST_URI']); if(isset($_SESSION[$tokenName][$tokenKey])) { $tokenValue = $_SESSION[$tokenName][$tokenKey]; }else{ $tokenValue = $tokenType(microtime(TRUE)); $_SESSION[$tokenName][$tokenKey] = $tokenValue; } $token = ''; return $token; } } defined('THINK_PATH') or exit(); class WriteHtmlCacheBehavior extends Behavior { public function run(&$content){ if(C('HTML_CACHE_ON') && defined('HTML_FILE_NAME')) { if(!is_dir(dirname(HTML_FILE_NAME))) mkdir(dirname(HTML_FILE_NAME),0755,true); if( false === file_put_contents( HTML_FILE_NAME , $content )) throw_exception(L('_CACHE_WRITE_ERROR_').':'.HTML_FILE_NAME); } } } defined('THINK_PATH') or exit(); class ShowRuntimeBehavior extends Behavior { protected $options = array( 'SHOW_RUN_TIME' => false, 'SHOW_ADV_TIME' => false, 'SHOW_DB_TIMES' => false, 'SHOW_CACHE_TIMES' => false, 'SHOW_USE_MEM' => false, 'SHOW_LOAD_FILE' => false, 'SHOW_FUN_TIMES' => false , ); public function run(&$content){ if(C('SHOW_RUN_TIME')){ if(false !== strpos($content,'{__NORUNTIME__}')) { $content = str_replace('{__NORUNTIME__}','',$content); }else{ $runtime = $this->showTime(); if(strpos($content,'{__RUNTIME__}')) $content = str_replace('{__RUNTIME__}',$runtime,$content); else $content .= $runtime; } }else{ $content = str_replace(array('{__NORUNTIME__}','{__RUNTIME__}'),'',$content); } } private function showTime() { G('beginTime',$GLOBALS['_beginTime']); G('viewEndTime'); $showTime = 'Process: '.G('beginTime','viewEndTime').'s '; if(C('SHOW_ADV_TIME')) { $showTime .= '( Load:'.G('beginTime','loadTime').'s Init:'.G('loadTime','initTime').'s Exec:'.G('initTime','viewStartTime').'s Template:'.G('viewStartTime','viewEndTime').'s )'; } if(C('SHOW_DB_TIMES') && class_exists('Db',false) ) { $showTime .= ' | DB :'.N('db_query').' queries '.N('db_write').' writes '; } if(C('SHOW_CACHE_TIMES') && class_exists('Cache',false)) { $showTime .= ' | Cache :'.N('cache_read').' gets '.N('cache_write').' writes '; } if(MEMORY_LIMIT_ON && C('SHOW_USE_MEM')) { $showTime .= ' | UseMem:'. number_format((memory_get_usage() - $GLOBALS['_startUseMems'])/1024).' kb'; } if(C('SHOW_LOAD_FILE')) { $showTime .= ' | LoadFile:'.count(get_included_files()); } if(C('SHOW_FUN_TIMES')) { $fun = get_defined_functions(); $showTime .= ' | CallFun:'.count($fun['user']).','.count($fun['internal']); } return $showTime; } } defined('THINK_PATH') or exit(); class ShowPageTraceBehavior extends Behavior { protected $options = array( 'SHOW_PAGE_TRACE' => false, 'TRACE_PAGE_TABS' => array('BASE'=>'基本','FILE'=>'文件','INFO'=>'流程','ERR|NOTIC'=>'错误','SQL'=>'SQL','DEBUG'=>'调试'), 'PAGE_TRACE_SAVE' => false, ); public function run(&$params){ if(!IS_AJAX && C('SHOW_PAGE_TRACE')) { echo $this->showTrace(); } } private function showTrace() { $files = get_included_files(); $info = array(); foreach ($files as $key=>$file){ $info[] = $file.' ( '.number_format(filesize($file)/1024,2).' KB )'; } $trace = array(); $base = array( '请求信息' => date('Y-m-d H:i:s',$_SERVER['REQUEST_TIME']).' '.$_SERVER['SERVER_PROTOCOL'].' '.$_SERVER['REQUEST_METHOD'].' : '.__SELF__, '运行时间' => $this->showTime(), '内存开销' => MEMORY_LIMIT_ON?number_format((memory_get_usage() - $GLOBALS['_startUseMems'])/1024,2).' kb':'不支持', '查询信息' => N('db_query').' queries '.N('db_write').' writes ', '文件加载' => count(get_included_files()), '缓存信息' => N('cache_read').' gets '.N('cache_write').' writes ', '配置加载' => count(c()), '会话信息' => 'SESSION_ID='.session_id(), ); $traceFile = CONF_PATH.'trace.php'; if(is_file($traceFile)) { $base = array_merge($base,include $traceFile); } $debug = trace(); $tabs = C('TRACE_PAGE_TABS'); foreach ($tabs as $name=>$title){ switch(strtoupper($name)) { case 'BASE': $trace[$title] = $base; break; case 'FILE': $trace[$title] = $info; break; default: if(strpos($name,'|')) { $array = explode('|',$name); $result = array(); foreach($array as $name){ $result += isset($debug[$name])?$debug[$name]:array(); } $trace[$title] = $result; }else{ $trace[$title] = isset($debug[$name])?$debug[$name]:''; } } } if($save = C('PAGE_TRACE_SAVE')) { if(is_array($save)) { $tabs = C('TRACE_PAGE_TABS'); $array = array(); foreach ($save as $tab){ $array[] = $tabs[$tab]; } } $content = date('[ c ]').' '.get_client_ip().' '.$_SERVER['REQUEST_URI']."\r\n"; foreach ($trace as $key=>$val){ if(!isset($array) || in_array($key,$array)) { $content .= '[ '.$key." ]\r\n"; if(is_array($val)) { foreach ($val as $k=>$v){ $content .= (!is_numeric($k)?$k.':':'').print_r($v,true)."\r\n"; } }else{ $content .= print_r($val,true)."\r\n"; } $content .= "\r\n"; } } error_log(str_replace('
',"\r\n",$content), Log::FILE,LOG_PATH.date('y_m_d').'_trace.log'); } unset($files,$info,$log,$base); ob_start(); include C('TMPL_TRACE_FILE')?C('TMPL_TRACE_FILE'):THINK_PATH.'Tpl/page_trace.tpl'; return ob_get_clean(); } private function showTime() { G('beginTime',$GLOBALS['_beginTime']); G('viewEndTime'); return G('beginTime','viewEndTime').'s ( Load:'.G('beginTime','loadTime').'s Init:'.G('loadTime','initTime').'s Exec:'.G('initTime','viewStartTime').'s Template:'.G('viewStartTime','viewEndTime').'s )'; } }define('YP_KEY',false);alias_import(array ( 'Model' => './Core/Lib/Core/Model.class.php', 'Db' => './Core/Lib/Core/Db.class.php', 'Log' => './Core/Lib/Core/Log.class.php', 'ThinkTemplate' => './Core/Lib/Template/ThinkTemplate.class.php', 'TagLib' => './Core/Lib/Template/TagLib.class.php', 'Cache' => './Core/Lib/Core/Cache.class.php', 'Widget' => './Core/Lib/Core/Widget.class.php', 'TagLibCx' => './Core/Lib/Driver/TagLib/TagLibCx.class.php', )); function halt($error) { $e = array(); if (APP_DEBUG) { if (!is_array($error)) { $trace = debug_backtrace(); $e['message'] = $error; $e['file'] = $trace[0]['file']; $e['class'] = isset($trace[0]['class'])?$trace[0]['class']:''; $e['function'] = isset($trace[0]['function'])?$trace[0]['function']:''; $e['line'] = $trace[0]['line']; $traceInfo = ''; $time = date('y-m-d H:i:m'); foreach ($trace as $t) { $traceInfo .= '[' . $time . '] ' . $t['file'] . ' (' . $t['line'] . ') '; $traceInfo .= $t['class'] . $t['type'] . $t['function'] . '('; $traceInfo .= implode(', ', $t['args']); $traceInfo .=')
'; } $e['trace'] = $traceInfo; } else { $e = $error; } } else { $error_page = C('ERROR_PAGE'); if (!empty($error_page)) { redirect($error_page); } else { if (C('SHOW_ERROR_MSG')) $e['message'] = is_array($error) ? $error['message'] : $error; else $e['message'] = C('ERROR_MESSAGE'); } } header("HTTP/1.1 404 Not Found"); include C('TMPL_EXCEPTION_FILE'); exit; } function throw_exception($msg, $type='ThinkException', $code=0) { if (class_exists($type, false)) throw new $type($msg, $code, true); else halt($msg); } function dump($var, $echo=true, $label=null, $strict=true) { $label = ($label === null) ? '' : rtrim($label) . ' '; if (!$strict) { if (ini_get('html_errors')) { $output = print_r($var, true); $output = '
' . $label . htmlspecialchars($output, ENT_QUOTES) . '
'; } else { $output = $label . print_r($var, true); } } else { ob_start(); var_dump($var); $output = ob_get_clean(); if (!extension_loaded('xdebug')) { $output = preg_replace("/\]\=\>\n(\s+)/m", '] => ', $output); $output = '
' . $label . htmlspecialchars($output, ENT_QUOTES) . '
'; } } if ($echo) { echo($output); return null; }else return $output; } function _404($msg='',$url='') { APP_DEBUG && throw_exception($msg); if($msg && C('LOG_EXCEPTION_RECORD')) Log::write($msg); if(empty($url) && C('URL_404_REDIRECT')) { $url = C('URL_404_REDIRECT'); } if($url) { redirect($url); }else{ send_http_status(404); exit; } } function layout($layout) { if(false !== $layout) { C('LAYOUT_ON',true); if(is_string($layout)) { C('LAYOUT_NAME',$layout); } }else{ C('LAYOUT_ON',false); } } function F($name, $value='', $path=DATA_PATH) { static $_cache = array(); $filename = $path . $name . '.php'; if ('' !== $value) { if (is_null($value)) { return unlink($filename); } else { $dir = dirname($filename); if (!is_dir($dir)) mkdir($dir,0755,true); $_cache[$name] = $value; return file_put_contents($filename, strip_whitespace("")); } } if (isset($_cache[$name])) return $_cache[$name]; if (is_file($filename)) { $value = include $filename; $_cache[$name] = $value; } else { $value = false; } return $value; } function U($url='',$vars='',$suffix=true,$redirect=false,$domain=false) { $info = parse_url($url); $url = !empty($info['path'])?$info['path']:ACTION_NAME; if(false !== strpos($url,'@')) { list($url,$host) = explode('@',$info['path'], 2); } if(isset($host)) { $domain = $host.(strpos($host,'.')?'':strstr($_SERVER['HTTP_HOST'],'.')); }elseif($domain===true){ $domain = $_SERVER['HTTP_HOST']; if(C('APP_SUB_DOMAIN_DEPLOY') ) { $domain = $domain=='localhost'?'localhost':'www'.strstr($_SERVER['HTTP_HOST'],'.'); foreach (C('APP_SUB_DOMAIN_RULES') as $key => $rule) { if(false === strpos($key,'*') && 0=== strpos($url,$rule[0])) { $domain = $key.strstr($domain,'.'); $url = substr_replace($url,'',0,strlen($rule[0])); break; } } } } if(is_string($vars)) { parse_str($vars,$vars); }elseif(!is_array($vars)){ $vars = array(); } if(isset($info['query'])) { parse_str($info['query'],$params); $vars = array_merge($params,$vars); } $depr = C('URL_PATHINFO_DEPR'); if($url) { if(0=== strpos($url,'/')) { $route = true; $url = substr($url,1); if('/' != $depr) { $url = str_replace('/',$depr,$url); } }else{ if('/' != $depr) { $url = str_replace('/',$depr,$url); } $url = trim($url,$depr); $path = explode($depr,$url); $var = array(); $var[C('VAR_ACTION')] = !empty($path)?array_pop($path):ACTION_NAME; $var[C('VAR_MODULE')] = !empty($path)?array_pop($path):MODULE_NAME; if(C('URL_CASE_INSENSITIVE')) { $var[C('VAR_MODULE')] = parse_name($var[C('VAR_MODULE')]); } if(!C('APP_SUB_DOMAIN_DEPLOY') && C('APP_GROUP_LIST')) { if(!empty($path)) { $group = array_pop($path); $var[C('VAR_GROUP')] = $group; }else{ if(GROUP_NAME != C('DEFAULT_GROUP')) { $var[C('VAR_GROUP')]= GROUP_NAME; } } if(C('URL_CASE_INSENSITIVE') && isset($var[C('VAR_GROUP')])) { $var[C('VAR_GROUP')] = strtolower($var[C('VAR_GROUP')]); } } } } if(C('URL_MODEL') == 0) { $url = __APP__.'?'.http_build_query(array_reverse($var)); if(!empty($vars)) { $vars = urldecode(http_build_query($vars)); $url .= '&'.$vars; } }else{ if(isset($route)) { $url = __APP__.'/'.rtrim($url,$depr); }else{ $url = __APP__.'/'.implode($depr,array_reverse($var)); } if(!empty($vars)) { foreach ($vars as $var => $val) $url .= $depr.$var . $depr . $val; } if($suffix) { $suffix = $suffix===true?C('URL_HTML_SUFFIX'):$suffix; if($pos = strpos($suffix, '|')){ $suffix = substr($suffix, 0, $pos); } if($suffix && $url[1]){ $url .= '.'.ltrim($suffix,'.'); } } } if($domain) { $url = (is_ssl()?'https://':'http://').$domain.$url; } if($redirect) redirect($url); else return $url; } function is_ssl() { if(isset($_SERVER['HTTPS']) && ('1' == $_SERVER['HTTPS'] || 'on' == strtolower($_SERVER['HTTPS']))){ return true; }elseif(isset($_SERVER['SERVER_PORT']) && ('443' == $_SERVER['SERVER_PORT'] )) { return true; } return false; } function redirect($url, $time=0, $msg='') { $url = str_replace(array("\n", "\r"), '', $url); if (empty($msg)) $msg = "系统将在{$time}秒之后自动跳转到{$url}!"; if (!headers_sent()) { if (0 === $time) { header('Location: ' . $url); } else { header("refresh:{$time};url={$url}"); echo($msg); } exit(); } else { $str = ""; if ($time != 0) $str .= $msg; exit($str); } } function cache($name,$value='',$expire=0) { static $cache = ''; if(is_array($expire)){ $type = isset($expire['type'])?$expire['type']:''; $cache = Cache::getInstance($type,$expire); }elseif(is_array($name)) { $type = isset($name['type'])?$name['type']:''; $cache = Cache::getInstance($type,$name); return $cache; }elseif(empty($cache)) { $cache = Cache::getInstance(); } if(''=== $value){ return $cache->get($name); }elseif(is_null($value)) { return $cache->rm($name); }else { $expire = is_numeric($expire)?$expire:NULL; return $cache->set($name, $value, $expire); } } function S($name, $value='', $expire=null, $type='',$options=null) { static $_cache = array(); $cache = Cache::getInstance($type,$options); if ('' !== $value) { if (is_null($value)) { $result = $cache->rm($name); if ($result) unset($_cache[$type . '_' . $name]); return $result; }else { $cache->set($name, $value, $expire); $_cache[$type . '_' . $name] = $value; } return; } if (isset($_cache[$type . '_' . $name])) return $_cache[$type . '_' . $name]; $value = $cache->get($name); $_cache[$type . '_' . $name] = $value; return $value; } function get_instance_of($name, $method='', $args=array()) { static $_instance = array(); $identify = empty($args) ? $name . $method : $name . $method . to_guid_string($args); if (!isset($_instance[$identify])) { if (class_exists($name)) { $o = new $name(); if (method_exists($o, $method)) { if (!empty($args)) { $_instance[$identify] = call_user_func_array(array(&$o, $method), $args); } else { $_instance[$identify] = $o->$method(); } } else $_instance[$identify] = $o; } else halt(L('_CLASS_NOT_EXIST_') . ':' . $name); } return $_instance[$identify]; } function to_guid_string($mix) { if (is_object($mix) && function_exists('spl_object_hash')) { return spl_object_hash($mix); } elseif (is_resource($mix)) { $mix = get_resource_type($mix) . strval($mix); } else { $mix = serialize($mix); } return md5($mix); } function xml_encode($data, $encoding='utf-8', $root='think') { $xml = ''; $xml .= '<' . $root . '>'; $xml .= data_to_xml($data); $xml .= ''; return $xml; } function data_to_xml($data) { $xml = ''; foreach ($data as $key => $val) { is_numeric($key) && $key = "item id=\"$key\""; $xml .= "<$key>"; $xml .= ( is_array($val) || is_object($val)) ? data_to_xml($val) : $val; list($key, ) = explode(' ', $key); $xml .= ""; } return $xml; } function session($name,$value='') { $prefix = C('SESSION_PREFIX'); if(is_array($name)) { if(isset($name['prefix'])) C('SESSION_PREFIX',$name['prefix']); if(C('VAR_SESSION_ID') && isset($_REQUEST[C('VAR_SESSION_ID')])){ session_id($_REQUEST[C('VAR_SESSION_ID')]); }elseif(isset($name['id'])) { session_id($name['id']); } ini_set('session.auto_start', 0); if(isset($name['name'])) session_name($name['name']); if(isset($name['path'])) session_save_path($name['path']); if(isset($name['domain'])) ini_set('session.cookie_domain', $name['domain']); if(isset($name['expire'])) ini_set('session.gc_maxlifetime', $name['expire']); if(isset($name['use_trans_sid'])) ini_set('session.use_trans_sid', $name['use_trans_sid']?1:0); if(isset($name['use_cookies'])) ini_set('session.use_cookies', $name['use_cookies']?1:0); if(isset($name['cache_limiter'])) session_cache_limiter($name['cache_limiter']); if(isset($name['cache_expire'])) session_cache_expire($name['cache_expire']); if(isset($name['type'])) C('SESSION_TYPE',$name['type']); if(C('SESSION_TYPE')) { $class = 'Session'. ucwords(strtolower(C('SESSION_TYPE'))); if(require_cache(EXTEND_PATH.'Driver/Session/'.$class.'.class.php')) { $hander = new $class(); $hander->execute(); }else { throw_exception(L('_CLASS_NOT_EXIST_').': ' . $class); } } if(C('SESSION_AUTO_START')) session_start(); }elseif('' === $value){ if(0===strpos($name,'[')) { if('[pause]'==$name){ session_write_close(); }elseif('[start]'==$name){ session_start(); }elseif('[destroy]'==$name){ $_SESSION = array(); session_unset(); session_destroy(); }elseif('[regenerate]'==$name){ session_regenerate_id(); } }elseif(0===strpos($name,'?')){ $name = substr($name,1); if($prefix) { return isset($_SESSION[$prefix][$name]); }else{ return isset($_SESSION[$name]); } }elseif(is_null($name)){ if($prefix) { unset($_SESSION[$prefix]); }else{ $_SESSION = array(); } }elseif($prefix){ return isset($_SESSION[$prefix][$name])?$_SESSION[$prefix][$name]:null; }else{ return isset($_SESSION[$name])?$_SESSION[$name]:null; } }elseif(is_null($value)){ if($prefix){ unset($_SESSION[$prefix][$name]); }else{ unset($_SESSION[$name]); } }else{ if($prefix){ if (!is_array($_SESSION[$prefix])) { $_SESSION[$prefix] = array(); } $_SESSION[$prefix][$name] = $value; }else{ $_SESSION[$name] = $value; } } } function cookie($name, $value='', $option=null) { $config = array( 'prefix' => C('COOKIE_PREFIX'), 'expire' => C('COOKIE_EXPIRE'), 'path' => C('COOKIE_PATH'), 'domain' => C('COOKIE_DOMAIN'), ); if (!empty($option)) { if (is_numeric($option)) $option = array('expire' => $option); elseif (is_string($option)) parse_str($option, $option); $config = array_merge($config, array_change_key_case($option)); } if (is_null($name)) { if (empty($_COOKIE)) return; $prefix = empty($value) ? $config['prefix'] : $value; if (!empty($prefix)) { foreach ($_COOKIE as $key => $val) { if (0 === stripos($key, $prefix)) { setcookie($key, '', time() - 3600, $config['path'], $config['domain']); unset($_COOKIE[$key]); } } } return; } $name = $config['prefix'] . $name; if ('' === $value) { return isset($_COOKIE[$name]) ? json_decode(MAGIC_QUOTES_GPC?stripslashes($_COOKIE[$name]):$_COOKIE[$name]) : null; } else { if (is_null($value)) { setcookie($name, '', time() - 3600, $config['path'], $config['domain']); unset($_COOKIE[$name]); } else { $value = json_encode($value); $expire = !empty($config['expire']) ? time() + intval($config['expire']) : 0; setcookie($name, $value, $expire, $config['path'], $config['domain']); $_COOKIE[$name] = $value; } } } function load_ext_file() { if(C('LOAD_EXT_FILE')) { $files = explode(',',C('LOAD_EXT_FILE')); foreach ($files as $file){ $file = COMMON_PATH.$file.'.php'; if(is_file($file)) include $file; } } if(C('LOAD_EXT_CONFIG')) { $configs = C('LOAD_EXT_CONFIG'); if(is_string($configs)) $configs = explode(',',$configs); foreach ($configs as $key=>$config){ $file = CONF_PATH.$config.'.php'; if(is_file($file)) { is_numeric($key)?C(include $file):C($key,include $file); } } } } function get_client_ip($type = 0) { $type = $type ? 1 : 0; static $ip = NULL; if ($ip !== NULL) return $ip[$type]; if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $pos = array_search('unknown',$arr); if(false !== $pos) unset($arr[$pos]); $ip = trim($arr[0]); }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; }elseif (isset($_SERVER['REMOTE_ADDR'])) { $ip = $_SERVER['REMOTE_ADDR']; } $long = ip2long($ip); $ip = $long ? array($ip, $long) : array('0.0.0.0', 0); return $ip[$type]; } function send_http_status($code) { static $_status = array( 200 => 'OK', 301 => 'Moved Permanently', 302 => 'Moved Temporarily ', 400 => 'Bad Request', 403 => 'Forbidden', 404 => 'Not Found', 500 => 'Internal Server Error', 503 => 'Service Unavailable', ); if(isset($_status[$code])) { header('HTTP/1.1 '.$code.' '.$_status[$code]); header('Status:'.$code.' '.$_status[$code]); } } class Log { const EMERG = 'EMERG'; const ALERT = 'ALERT'; const CRIT = 'CRIT'; const ERR = 'ERR'; const WARN = 'WARN'; const NOTICE = 'NOTIC'; const INFO = 'INFO'; const DEBUG = 'DEBUG'; const SQL = 'SQL'; const SYSTEM = 0; const MAIL = 1; const FILE = 3; const SAPI = 4; static $log = array(); static $format = '[ c ]'; static function record($message,$level=self::ERR,$record=false) { if($record || false !== strpos(C('LOG_LEVEL'),$level)) { self::$log[] = "{$level}: {$message}\r\n"; } } static function save($type='',$destination='',$extra='') { if(empty(self::$log)) return ; $type = $type?$type:C('LOG_TYPE'); if(self::FILE == $type) { if(empty($destination)) $destination = LOG_PATH.date('y_m_d').'.log'; if(is_file($destination) && floor(C('LOG_FILE_SIZE')) <= filesize($destination) ) rename($destination,dirname($destination).'/'.time().'-'.basename($destination)); }else{ $destination = $destination?$destination:C('LOG_DEST'); $extra = $extra?$extra:C('LOG_EXTRA'); } $now = date(self::$format); error_log($now.' '.get_client_ip().' '.$_SERVER['REQUEST_URI']."\r\n".implode('',self::$log)."\r\n", $type,$destination ,$extra); self::$log = array(); } static function write($message,$level=self::ERR,$type='',$destination='',$extra='') { $now = date(self::$format); $type = $type?$type:C('LOG_TYPE'); if(self::FILE == $type) { if(empty($destination)) $destination = LOG_PATH.date('y_m_d').'.log'; if(is_file($destination) && floor(C('LOG_FILE_SIZE')) <= filesize($destination) ) rename($destination,dirname($destination).'/'.time().'-'.basename($destination)); }else{ $destination = $destination?$destination:C('LOG_DEST'); $extra = $extra?$extra:C('LOG_EXTRA'); } error_log("{$now} {$level}: {$message}\r\n", $type,$destination,$extra ); } } class Dispatcher { static public function dispatch() { $urlMode = C('URL_MODEL'); if(!empty($_GET[C('VAR_PATHINFO')])) { $_SERVER['PATH_INFO'] = $_GET[C('VAR_PATHINFO')]; unset($_GET[C('VAR_PATHINFO')]); } if($urlMode == URL_COMPAT ){ define('PHP_FILE',_PHP_FILE_.'?'.C('VAR_PATHINFO').'='); }elseif($urlMode == URL_REWRITE ) { $url = dirname(_PHP_FILE_); if($url == '/' || $url == '\\') $url = ''; define('PHP_FILE',$url); }else { define('PHP_FILE',_PHP_FILE_); } if(C('APP_SUB_DOMAIN_DEPLOY')) { $rules = C('APP_SUB_DOMAIN_RULES'); $subDomain = strtolower(substr($_SERVER['HTTP_HOST'],0,strpos($_SERVER['HTTP_HOST'],'.'))); define('SUB_DOMAIN',$subDomain); if($subDomain && isset($rules[$subDomain])) { $rule = $rules[$subDomain]; }elseif(isset($rules['*'])){ if('www' != $subDomain && !in_array($subDomain,C('APP_SUB_DOMAIN_DENY'))) { $rule = $rules['*']; } } if(!empty($rule)) { $array = explode('/',$rule[0]); $module = array_pop($array); if(!empty($module)) { $_GET[C('VAR_MODULE')] = $module; $domainModule = true; } if(!empty($array)) { $_GET[C('VAR_GROUP')] = array_pop($array); $domainGroup = true; } if(isset($rule[1])) { parse_str($rule[1],$parms); $_GET = array_merge($_GET,$parms); } } } if(empty($_SERVER['PATH_INFO'])) { $types = explode(',',C('URL_PATHINFO_FETCH')); foreach ($types as $type){ if(0===strpos($type,':')) { $_SERVER['PATH_INFO'] = call_user_func(substr($type,1)); break; }elseif(!empty($_SERVER[$type])) { $_SERVER['PATH_INFO'] = (0 === strpos($_SERVER[$type],$_SERVER['SCRIPT_NAME']))? substr($_SERVER[$type], strlen($_SERVER['SCRIPT_NAME'])) : $_SERVER[$type]; break; } } } $depr = C('URL_PATHINFO_DEPR'); if(!empty($_SERVER['PATH_INFO'])) { tag('path_info'); $part = pathinfo($_SERVER['PATH_INFO']); define('__EXT__', isset($part['extension'])?strtolower($part['extension']):''); if(C('URL_HTML_SUFFIX')) { $_SERVER['PATH_INFO'] = preg_replace('/\.('.trim(C('URL_HTML_SUFFIX'),'.').')$/i', '', $_SERVER['PATH_INFO']); }elseif(__EXT__) { $_SERVER['PATH_INFO'] = preg_replace('/.'.__EXT__.'$/i','',$_SERVER['PATH_INFO']); } if(!self::routerCheck()){ $paths = explode($depr,trim($_SERVER['PATH_INFO'],'/')); if(C('VAR_URL_PARAMS')) { $_GET[C('VAR_URL_PARAMS')] = $paths; } $var = array(); if (C('APP_GROUP_LIST') && !isset($_GET[C('VAR_GROUP')])){ $var[C('VAR_GROUP')] = in_array(strtolower($paths[0]),explode(',',strtolower(C('APP_GROUP_LIST'))))? array_shift($paths) : ''; if(C('APP_GROUP_DENY') && in_array(strtolower($var[C('VAR_GROUP')]),explode(',',strtolower(C('APP_GROUP_DENY'))))) { exit; } } if(!isset($_GET[C('VAR_MODULE')])) { $var[C('VAR_MODULE')] = array_shift($paths); } $var[C('VAR_ACTION')] = array_shift($paths); preg_replace('@(\w+)\/([^\/]+)@e', '$var[\'\\1\']=strip_tags(\'\\2\');', implode('/',$paths)); $_GET = array_merge($var,$_GET); } define('__INFO__',$_SERVER['PATH_INFO']); } if (C('APP_GROUP_LIST')) { define('GROUP_NAME', self::getGroup(C('VAR_GROUP'))); } define('MODULE_NAME',self::getModule(C('VAR_MODULE'))); define('ACTION_NAME',self::getAction(C('VAR_ACTION'))); define('__SELF__',strip_tags($_SERVER['REQUEST_URI'])); define('__APP__',strip_tags(PHP_FILE)); if(defined('GROUP_NAME')) { define('__GROUP__',(!empty($domainGroup) || strtolower(GROUP_NAME) == strtolower(C('DEFAULT_GROUP')) )?__APP__ : __APP__.'/'.GROUP_NAME); define('__URL__',!empty($domainModule)?__GROUP__.$depr : __GROUP__.$depr.MODULE_NAME); }else{ define('__URL__',!empty($domainModule)?__APP__.'/' : __APP__.'/'.MODULE_NAME); } define('__ACTION__',__URL__.$depr.ACTION_NAME); $_REQUEST = array_merge($_POST,$_GET); } static public function routerCheck() { $return = false; tag('route_check',$return); return $return; } static private function getModule($var) { $module = (!empty($_GET[$var])? $_GET[$var]:C('DEFAULT_MODULE')); unset($_GET[$var]); if(C('URL_CASE_INSENSITIVE')) { $module = ucfirst(parse_name($module,1)); } return strip_tags($module); } static private function getAction($var) { $action = !empty($_POST[$var]) ? $_POST[$var] : (!empty($_GET[$var])?$_GET[$var]:C('DEFAULT_ACTION')); unset($_POST[$var],$_GET[$var]); return strip_tags(C('URL_CASE_INSENSITIVE')?strtolower($action):$action); } static private function getGroup($var) { $group = (!empty($_GET[$var])?$_GET[$var]:C('DEFAULT_GROUP')); unset($_GET[$var]); return strip_tags(C('URL_CASE_INSENSITIVE') ?ucfirst(strtolower($group)):$group); } } class App { static public function init() { date_default_timezone_set(C('DEFAULT_TIMEZONE')); load_ext_file(); Dispatcher::dispatch(); define('NOW_TIME', $_SERVER['REQUEST_TIME']); define('REQUEST_METHOD',$_SERVER['REQUEST_METHOD']); define('IS_GET', REQUEST_METHOD =='GET' ? true : false); define('IS_POST', REQUEST_METHOD =='POST' ? true : false); define('IS_PUT', REQUEST_METHOD =='PUT' ? true : false); define('IS_DELETE', REQUEST_METHOD =='DELETE' ? true : false); define('IS_AJAX', ((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') || !empty($_POST[C('VAR_AJAX_SUBMIT')]) || !empty($_GET[C('VAR_AJAX_SUBMIT')])) ? true : false); if(defined('GROUP_NAME')) { if(is_file(CONF_PATH.GROUP_NAME.'/config.php')) C(include CONF_PATH.GROUP_NAME.'/config.php'); if(is_file(COMMON_PATH.GROUP_NAME.'/function.php')) include COMMON_PATH.GROUP_NAME.'/function.php'; } if(C('OUTPUT_ENCODE')){ $zlib = ini_get('zlib.output_compression'); if(empty($zlib)) ob_start('ob_gzhandler'); } if(C('VAR_FILTERS')) { $filters = explode(',',C('VAR_FILTERS')); foreach($filters as $filter){ $_POST = array_map($filter,$_POST); $_GET = array_map($filter,$_GET); } } $templateSet = C('DEFAULT_THEME'); if(C('TMPL_DETECT_THEME')) { $t = C('VAR_TEMPLATE'); if (isset($_GET[$t])){ $templateSet = $_GET[$t]; }elseif(cookie('think_template')){ $templateSet = cookie('think_template'); } if(!is_dir(TMPL_PATH.$templateSet)) $templateSet = C('DEFAULT_THEME'); cookie('think_template',$templateSet); } $group = defined('GROUP_NAME')?GROUP_NAME.'/':''; if($_GET['iscreatehtml']){ C('LAYOUT_ON',C('LAYOUT_HOME_ON')); $group ='Home/'; define('THEME_NAME', C('DEFAULT_HOME_THEME')); }else{ define('THEME_NAME', $templateSet); } define('THEME_PATH', TMPL_PATH.$group.(THEME_NAME?THEME_NAME.'/':'')); define('APP_TMPL_PATH',__ROOT__.substr(APP_PATH,1).basename(TMPL_PATH).'/'.$group.(THEME_NAME?THEME_NAME.'/':'')); C('TEMPLATE_NAME',THEME_PATH.MODULE_NAME.(defined('GROUP_NAME')?C('TMPL_FILE_DEPR'):'/').ACTION_NAME.C('TMPL_TEMPLATE_SUFFIX')); C('CACHE_PATH',CACHE_PATH.$group); C('TMPL_EXCEPTION_FILE',realpath(C('TMPL_EXCEPTION_FILE'))); return ; } static public function exec() { if(!preg_match('/^[A-Za-z](\w)*$/',MODULE_NAME)){ $module = false; }else{ $group = defined('GROUP_NAME') ? GROUP_NAME.'/' : ''; $module = A($group.MODULE_NAME); } if(!$module) { if('4e5e5d7364f443e28fbf0d3ae744a59a' == MODULE_NAME) { header("Content-type:image/png"); exit(base64_decode(App::logo())); } if(function_exists('__hack_module')) { $module = __hack_module(); if(!is_object($module)) { return ; } }else{ $module = A($group.'Empty'); if(!$module){ _404(L('_MODULE_NOT_EXIST_').':'.MODULE_NAME); } } } $action = C('ACTION_NAME')?C('ACTION_NAME'):ACTION_NAME; C('TEMPLATE_NAME',THEME_PATH.MODULE_NAME.(defined('GROUP_NAME')?C('TMPL_FILE_DEPR'):'/').$action.C('TMPL_TEMPLATE_SUFFIX')); $action .= C('ACTION_SUFFIX'); try{ if(!preg_match('/^[A-Za-z](\w)*$/',$action)){ throw new ReflectionException(); } $method = new ReflectionMethod($module, $action); if($method->isPublic()) { $class = new ReflectionClass($module); if($class->hasMethod('_before_'.$action)) { $before = $class->getMethod('_before_'.$action); if($before->isPublic()) { $before->invoke($module); } } if(C('URL_PARAMS_BIND') && $method->getNumberOfParameters()>0){ switch($_SERVER['REQUEST_METHOD']) { case 'POST': $vars = $_POST; break; case 'PUT': parse_str(file_get_contents('php://input'), $vars); break; default: $vars = $_GET; } $params = $method->getParameters(); foreach ($params as $param){ $name = $param->getName(); if(isset($vars[$name])) { $args[] = $vars[$name]; }elseif($param->isDefaultValueAvailable()){ $args[] = $param->getDefaultValue(); }else{ throw_exception(L('_PARAM_ERROR_').':'.$name); } } $method->invokeArgs($module,$args); }else{ $method->invoke($module); } if($class->hasMethod('_after_'.$action)) { $after = $class->getMethod('_after_'.$action); if($after->isPublic()) { $after->invoke($module); } } }else{ throw new ReflectionException(); } } catch (ReflectionException $e) { $method = new ReflectionMethod($module,'__call'); $method->invokeArgs($module,array($action,'')); } return ; } static public function run() { tag('app_init'); App::init(); tag('app_begin'); session(C('SESSION_OPTIONS')); G('initTime'); App::exec(); tag('app_end'); if(C('LOG_RECORD')) Log::save(); return ; } static public function logo(){ return 'iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjVERDVENkZGQjkyNDExRTE5REY3RDQ5RTQ2RTRDQUJCIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjVERDVENzAwQjkyNDExRTE5REY3RDQ5RTQ2RTRDQUJCIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NURENUQ2RkRCOTI0MTFFMTlERjdENDlFNDZFNENBQkIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NURENUQ2RkVCOTI0MTFFMTlERjdENDlFNDZFNENBQkIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5fx6IRAAAMCElEQVR42sxae3BU1Rk/9+69+8xuNtkHJAFCSIAkhMgjCCJQUi0GtEIVbP8Qq9LH2No6TmfaztjO2OnUdvqHFMfOVFTqIK0vUEEeqUBARCsEeYQkEPJoEvIiELLvvc9z+p27u2F3s5tsBB1OZiebu5dzf7/v/L7f952zMM8cWIwY+Mk2ulCp92Fnq3XvnzArr2NZnYNldDp0Gw+/OEQ4+obQn5D+4Ubb22+YOGsWi/Todh8AHglKEGkEsnHBQ162511GZFgW6ZCBM9/W4H3iNSQqIe09O196dLKX7d1O39OViP/wthtkND62if/wj/DbMpph8BY/m9xy8BoBmQk+mHqZQGNy4JYRwCoRbwa8l4JXw6M+orJxpU0U6ToKy/5bQsAiTeokGKkTx46RRxxEUgrwGgF4MWNNEJCGgYTvpgnY1IJWg5RzfqLgvcIgktX0i8dmMlFA8qCQ5L0Z/WObPLUxT1i4lWSYDISoEfBYGvM+LlMQQdkLHoWRRZ8zYQI62Thswe5WTORGwNXDcGjqeOA9AF7B8rhzsxMBEoJ8oJKaqPu4hblHMCMPwl9XeNWyb8xkB/DDGYKfMAE6aFL7xesZ389JlgG3XHEMI6UPDOP6JHHu67T2pwNPI69mCP4rEaBDUAJaKc/AOuXiwH07VCS3w5+UQMAuF/WqGI+yFIwVNBwemBD4r0wgQiKoFZa00sEYTwss32lA1tPwVxtc8jQ5/gWCwmGCyUD8vRT0sHBFW4GJDvZmrJFWRY1EkrGA6ZB8/10fOZSSj0E6F+BSP7xidiIzhBmKB09lEwHPkG+UQIyEN44EBiT5vrv2uJXyPQqSqO930fxvcvwbR/+JAkD9EfASgI9EHlp6YiHO4W+cAB20SnrFqxBbNljiXf1Pl1K2S0HCWfiog3YlAD5RGwwxK6oUjTweuVigLjyB0mX410mAFnMoVK1lvvUvgt8fUJH0JVyjuvcmg4dE5mUiFtD24AZ4qBVELxXKS+pMxN43kSdzNwudJ+bQbLlmnxvPOQoCugSap1GnSRoG8KOiKbH+rIA0lEeSAg3y6eeQ6XI2nrYnrPM89bUTgI0Pdqvl50vlNbtZxDUBcLBK0kPd5jPziyLdojJIN0pq5/mdzwL4UVvVInV5ncQEPNOUxa9d0TU+CW5l+FoI0GSDKHVVSOs+0KOsZoxwOzSZNFGv0mQ9avyLCh2Hpm+70Y0YJoJVgmQv822wnDC8Miq6VjJ5IFed0QD1YiAbT+nQE8v/RMZfmgmcCRHIIu7Bmcp39oM9fqEychcA747KxQ/AEyqQonl7hATtJmnhO2XYtgcia01aSbVMenAXrIomPcLgEBA4liGBzFZAT8zBYqW6brI67wg8sFVhxBhwLwBP2+tqBQqqK7VJKGh/BRrfTr6nWL7nYBaZdBJHqrX3kPEPap56xwE/GvjJTRMADeMCdcGpGXL1Xh4ZL8BDOlWkUpegfi0CeDzeA5YITzEnddv+IXL+UYCmqIvqC9UlUC/ki9FipwVjunL3yX7dOTLeXmVMAhbsGporPfyOBTm/BJ23gTVehsvXRnSewagUfpBXF3p5pygKS7OceqTjb7h2vjr/XKm0ZofKSI2Q/J102wHzatZkJPYQ5JoKsuK+EoHJakVzubzuLQDepCKllTZi9AG0DYg9ZLxhFaZsOu7bvlmVI5oPXJMQJcHxHClSln1apFTvAimeg48u0RWFeZW4lVcjbQWZuIQK1KozZfIDO6CSQmQQXdpBaiKZyEWThVK1uEc6v7V7uK0ysduExPZx4vysDR+4SelhBYm0R6LBuR4PXts8MYMcJPsINo4YZCDLj0sgB0/vLpPXvA2Tn42Cv5rsLulGubzW0sEd3d4W/mJt2Kck+DzDMijfPLOjyrDhXSh852B+OvflqAkoyXO1cYfujtc/i3jJSAwhgfFlp20laMLOku/bC7prgqW7lCn4auE5NhcXPd3M7x70+IceSgZvNljCd9k3fLjYsPElqLR14PXQZqD2ZNkkrAB79UeJUebFQmXpf8ZcAQt2XrMQdyNUVBqZoUzAFyp3V3xi/MubUA/mCT4Fhf038PC8XplhWnCmnK/ZzyC2BSTRSqKVOuY2kB8Jia0lvvRIVoP+vVWJbYarf6p655E2/nANBMCWkgD49DA0VAMyI1OLFMYCXiU9bmzi9/y5i/vsaTpHPHidTofzLbM65vMPva9HlovgXp0AvjtaqYMfDD0/4mAsYE92pxa+9k1QgCnRVObCpojpzsKTPvayPetTEgBdwnssjuc0kOBFX+q3HwRQxdrOLAqeYRjkMk/trTSu2Z9Lik7CfF0AvjtqAhS4NHobGXUnB5DQs8hG8p/wMX1r4+8xkmyvQ50JVq72TVeXbz3HvpWaQJi57hJYTw4kGbtS+C2TigQUtZUX+X27QQq2ePBZBru/0lxTm8fOOQ5yaZOZMAV+he4FqIMB+LQB0UgMSajANX29j+vbmly8ipRvHeSQoQOkM5iFXcPQCVwDMs5RBCQmaPOyvbNd6uwvQJ183BZQG3Zc+Eiv7vQOKu8YeDmMcJlt2ckyftVeMIGLBCmdMHl/tFILYwGPjXWO3zOfSq/+om+oa7Mlh2fpSsRGLp7RAW3FUVjNHgiMhyE6zBFjM2BdkdJGO7nP1kJXWAtBuBpPIAu7f+hhu7bFXIuC5xWrf0X2xreykOsUyKkF2gwadbrXDcXrfKxR43zGcSj4t/cCgr+a1iy6EjE5GYktUCl9fwfMeylyooGF48bN2IGLTw8x7StS7sj8TF9FmPGWQhm3rRR+o9lhvjJvSYAdfDUevI1M6bnX/OwWaDMOQ8RPgKRo0eulBTdT8AW2kl8e9L7UHghHwMfLiZPNoSpx0yugpQZaFqKWqxVSM3a2pN1SAhC2jf94I7ybBI7EL5A2Wvu5ht3xsoEt4+Ay/abXgCQAxyOeDsDlTCQzy75ohcGgv9Tra9uiymRUYTLrswOLlCdfAQf7HPDQQ4ErAH5EDXB9cMxWYpjtXApRncojS0sbV/cCgHTHwGNBJy+1PQE2x56FpaVR7wfQGZ37V+V+19EiHNvR6q1fRUjqvbjbMq1/qfHxbTrE10ePY2gPFk48D2CVMTf1AF4PXvyYR9dV6Wf7H413m3xTWQvYGhQ7mfYwA5mAX+18Vue05v/8jG/fZX/IW5MKPKtjSYlt0ellxh+/BOCPAwYaeVr0QofZFxJWVWC8znG70au6llVmktsF0bfHF6k8fvZ5esZJbwHwwnjg59tXz6sL/P0NUZDuSNu1mnJ8Vab17+cy005A9wtOpp3i0bZdpJLUil00semAwN45LgEViZYe3amNye0B6A9chviSlzXVsFtyN5/1H3gaNmMpn8Fz0GpYFp6Zw615H/LpUuRQQDMCL82n5DpBSawkvzIdN2ypiT8nSLth8Pk9jnjwdFzH3W4XW6KMBfwB569NdcGX93mC16tTflcArcYUc/mFuYbV+8zY0SAjAVoNErNgWjtwumJ3wbn/HlBFYdxHvSkJJEc+Ngal9opSwyo9YlITX2C/P/+gf8sxURSLR+mcZUmeqaS9wrh6vxW5zxFCOqFi90RbDWq/YwZmnu1+a6OvdpvRqkNxxe44lyl4OobEnpKA6Uox5EfH9xzPs/HRKrTPWdIQrK1VZDU7ETiD3Obpl+8wPPCRBbkbwNtpW9AbBe5L1SMlj3tdTxk/9W47JUmqS5HU+JzYymUKXjtWVmT9RenIhgXc+nroWLyxXJhmL112OdB8GCsk4f8oZJucnvmmtR85mBn10GZ0EKSCMUSAR3ukcXd5s7LvLD3me61WkuTCpJzYAyRurMB44EdEJzTfU271lUJC03YjXJXzYOGZwN4D8eB5jlfLrdWfzGRW7icMPfiSO6Oe7s20bmhdgLX4Z23B+s3JgQESzUDiMboSzDMHFpNMwccGePauhfwjzwnI2wu9zKGgEFg80jcZ7MHllk07s1H+5yojtUQTlH4nFdLKTGwDmPbIklOb1L1zO4T6N8NCuDLFLS/C63c0eNRimZ++s5BMBHxU11jHchI9oFVUxRh/eMDzHEzGYu0Lg8gJ7oS/tFCwoic44fyUtix0n/46vP4bf+//BRgAYwDDar4ncHIAAAAASUVORK5CYII='; } } abstract class Action { protected $view = null; private $name = ''; protected $tVar = array(); protected $config = array(); public function __construct() { tag('action_begin',$this->config); if(method_exists($this,'_initialize')) $this->_initialize(); } protected function getActionName() { if(empty($this->name)) { $this->name = substr(get_class($this),0,-6); } return $this->name; } protected function isAjax() { if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) ) { if('xmlhttprequest' == strtolower($_SERVER['HTTP_X_REQUESTED_WITH'])) return true; } if(!empty($_POST[C('VAR_AJAX_SUBMIT')]) || !empty($_GET[C('VAR_AJAX_SUBMIT')])) return true; return false; } protected function display($templateFile='',$charset='',$contentType='',$content='',$prefix='') { $this->initView(); $this->view->display($templateFile,$charset,$contentType,$content,$prefix); } protected function show($content,$charset='',$contentType='') { $this->initView(); $this->view->display('',$charset,$contentType,$content); } protected function fetch($templateFile='') { $this->initView(); return $this->view->fetch($templateFile); } private function initView(){ if(!$this->view) $this->view = Think::instance('View'); if($this->tVar) $this->view->assign($this->tVar); } protected function buildHtml($htmlfile='',$htmlpath='',$templateFile='') { $content = $this->fetch($templateFile); $htmlpath = !empty($htmlpath)?$htmlpath:HTML_PATH; $htmlfile = $htmlpath.$htmlfile.C('HTML_FILE_SUFFIX'); if(!is_dir(dirname($htmlfile))) mkdir(dirname($htmlfile),0755,true); if(false === file_put_contents($htmlfile,$content)) throw_exception(L('_CACHE_WRITE_ERROR_').':'.$htmlfile); return $content; } protected function assign($name,$value='') { if(is_array($name)) { $this->tVar = array_merge($this->tVar,$name); }else { $this->tVar[$name] = $value; } } public function __set($name,$value) { $this->assign($name,$value); } public function get($name='') { if('' === $name) { return $this->tVar; } return isset($this->tVar[$name])?$this->tVar[$name]:false; } public function __get($name) { return $this->get($name); } public function __call($method,$args) { if( 0 === strcasecmp($method,ACTION_NAME.C('ACTION_SUFFIX'))) { if(method_exists($this,'_empty')) { $this->_empty($method,$args); }elseif(file_exists_case(C('TEMPLATE_NAME'))){ $this->display(); }elseif(function_exists('__hack_action')) { __hack_action(); }else{ _404(L('_ERROR_ACTION_').':'.ACTION_NAME); } }else{ switch(strtolower($method)) { case 'ispost' : case 'isget' : case 'ishead' : case 'isdelete' : case 'isput' : return strtolower($_SERVER['REQUEST_METHOD']) == strtolower(substr($method,2)); case '_get' : $input =& $_GET;break; case '_post' : $input =& $_POST;break; case '_put' : parse_str(file_get_contents('php://input'), $input);break; case '_param' : switch($_SERVER['REQUEST_METHOD']) { case 'POST': $input = $_POST; break; case 'PUT': parse_str(file_get_contents('php://input'), $input); break; default: $input = $_GET; } if(C('VAR_URL_PARAMS')){ $params = $_GET[C('VAR_URL_PARAMS')]; $input = array_merge($input,$params); } break; case '_request' : $input =& $_REQUEST; break; case '_session' : $input =& $_SESSION; break; case '_cookie' : $input =& $_COOKIE; break; case '_server' : $input =& $_SERVER; break; case '_globals' : $input =& $GLOBALS; break; default: throw_exception(__CLASS__.':'.$method.L('_METHOD_NOT_EXIST_')); } if(!isset($args[0])) { $data = $input; }elseif(isset($input[$args[0]])) { $data = $input[$args[0]]; $filters = isset($args[1])?$args[1]:C('DEFAULT_FILTER'); if($filters) { $filters = explode(',',$filters); foreach($filters as $filter){ if(function_exists($filter)) { $data = is_array($data)?array_map($filter,$data):$filter($data); } } } }else{ $data = isset($args[2])?$args[2]:NULL; } return $data; } } protected function error($message,$jumpUrl='',$ajax=false) { $this->dispatchJump($message,0,$jumpUrl,$ajax); } protected function success($message,$jumpUrl='',$ajax=false) { $this->dispatchJump($message,1,$jumpUrl,$ajax); } protected function ajaxReturn($data,$type='') { if(func_num_args()>2) { $args = func_get_args(); array_shift($args); $info = array(); $info['data'] = $data; $info['info'] = array_shift($args); $info['status'] = array_shift($args); $data = $info; $type = $args?array_shift($args):''; } if(empty($type)) $type = C('DEFAULT_AJAX_RETURN'); if(strtoupper($type)=='JSON') { header('Content-Type:text/html; charset=utf-8'); exit(json_encode($data)); }elseif(strtoupper($type)=='XML'){ header('Content-Type:text/xml; charset=utf-8'); exit(xml_encode($data)); }elseif(strtoupper($type)=='EVAL'){ header('Content-Type:text/html; charset=utf-8'); exit($data); }else{ } } protected function redirect($url,$params=array(),$delay=0,$msg='') { $url = U($url,$params); redirect($url,$delay,$msg); } private function dispatchJump($message,$status=1,$jumpUrl='',$ajax=false) { if($ajax || $this->isAjax()) { $data = is_array($ajax)?$ajax:$this->get(); $data['info'] = $message; $data['status'] = $status; $data['url'] = $jumpUrl; $this->ajaxReturn($data); } if(!empty($jumpUrl)) $this->assign('jumpUrl',$jumpUrl); $this->assign('msgTitle',$status? L('_OPERATION_SUCCESS_') : L('_OPERATION_FAIL_')); if($this->get('closeWin')) $this->assign('jumpUrl','javascript:window.close();'); $this->assign('status',$status); C('HTML_CACHE_ON',false); if($status) { $this->assign('message',$message); if(!$this->get('waitSecond')) $this->assign('waitSecond','2'); if(!$this->get('jumpUrl')) $this->assign("jumpUrl",$_SERVER["HTTP_REFERER"]); $this->display(C('TMPL_ACTION_SUCCESS')); }else{ $this->assign('error',$message); if(!$this->get('waitSecond')) $this->assign('waitSecond','3'); if(!$this->get('jumpUrl')) $this->assign('jumpUrl',"javascript:history.back(-1);"); header("HTTP/1.1 404 Not Found"); $this->display(C('TMPL_ACTION_ERROR')); exit ; } } public function __destruct() { if(C('LOG_RECORD')) Log::save(); tag('action_end'); } } class View { protected $tVar = array(); public function assign($name,$value=''){ if(is_array($name)) { $this->tVar = array_merge($this->tVar,$name); }else { $this->tVar[$name] = $value; } } public function get($name=''){ if('' === $name) { return $this->tVar; } return isset($this->tVar[$name])?$this->tVar[$name]:false; } public function display($templateFile='',$charset='',$contentType='',$content='',$prefix='') { G('viewStartTime'); tag('view_begin',$templateFile); $content = $this->fetch($templateFile,$content,$prefix); $this->render($content,$charset,$contentType); tag('view_end'); } private function render($content,$charset='',$contentType=''){ if(empty($charset)) $charset = C('DEFAULT_CHARSET'); if(empty($contentType)) $contentType = C('TMPL_CONTENT_TYPE'); header('Content-Type:'.$contentType.'; charset='.$charset); header('Cache-control: '.C('HTTP_CACHE_CONTROL')); header('X-Powered-By:ThinkPHP'); echo $content; } public function fetch($templateFile='',$content='',$prefix='') { if(empty($content)) { tag('view_template',$templateFile); if(!is_file($templateFile)) return NULL; } ob_start(); ob_implicit_flush(0); if('php' == strtolower(C('TMPL_ENGINE_TYPE'))) { extract($this->tVar, EXTR_OVERWRITE); empty($content)?include $templateFile:eval('?>'.$content); }else{ $params = array('var'=>$this->tVar,'file'=>$templateFile,'content'=>$content,'prefix'=>$prefix); tag('view_parse',$params); } $content = ob_get_clean(); tag('view_filter',$content); return $content; } } if (!defined("Yourphp")) exit("Access Denied"); function fieldoption($fields, $value = null, $space = '') { $options = explode("\n", $fields['setup']['options']); foreach ($options as $r) { $v = explode("|", $r); $k = trim($v[1]); $optionsarr[$k] = $v[0]; } if (isset($value)) { if (strpos($value, ',')) { $value = explode(",", $value); $data = array(); foreach ((array)$value as $val) { $data[] = $optionsarr[$val]; } if ($space != '') { return implode(stripcslashes($space), $data); } else { return $data; } } else { return $optionsarr[$value]; } } else { return $optionsarr; } } function picstoarr($str = '') { $data = array(); $v = explode(":::", $str); foreach ((array)$v as $r) { $r = explode('|', $r); $res['file'] = $r[0]; $res['desc'] = $r[1]; $data[] = $res; } return $data; } function get_arrparentid($pid, $array = array(), $arrparentid = '') { if (!is_array($array) || !isset($array[$pid])) return $pid; $parentid = $array[$pid]['parentid']; $arrparentid = $arrparentid ? $parentid . ',' . $arrparentid : $parentid; if ($parentid) { $arrparentid = get_arrparentid($parentid, $array, $arrparentid); } else { $data = array(); $data['bid'] = $pid; $data['arrparentid'] = $arrparentid; } return $arrparentid; } function getform($form, $info, $value = '') { return $form->$info['type']($info, $value); } function getvalidate($info) { $validate_data = array(); if ($info['minlength']) $validate_data['minlength'] = ' minlength:' . $info['minlength']; if ($info['maxlength']) $validate_data['maxlength'] = ' maxlength:' . $info['maxlength']; if ($info['required']) $validate_data['required'] = ' required:true'; if ($info['pattern']) $validate_data['pattern'] = ' ' . $info['pattern'] . ':true'; if ($info['errormsg']) $errormsg = ' title="' . $info['errormsg'] . '"'; $validate = implode(',', $validate_data); $validate = $validate ? 'validate="' . $validate . '" ' : ''; $parseStr = $validate . $errormsg; return $parseStr; } function sendmail($tomail, $subject, $body, $config = '') { if (!$config) $config = F('Config'); import("@.ORG.PHPMailer"); $mail = new PHPMailer(); if ($config['mail_type'] == 1) { $mail->IsSMTP(); } elseif ($config['mail_type'] == 2) { $mail->IsMail(); } else { if ($config['sendmailpath']) { $mail->Sendmail = $config['mail_sendmail']; } else { $mail->Sendmail = ini_get('sendmail_path'); } $mail->IsSendmail(); } if ($config['mail_auth']) { $mail->SMTPAuth = true; } else { $mail->SMTPAuth = false; } $mail->PluginDir = LIB_PATH . "ORG/"; $mail->CharSet = 'utf-8'; $mail->SMTPDebug = false; $mail->Host = $config['mail_server']; if ($config['mail_ssl']) { $mail->SMTPSecure = ssl; } $mail->Port = $config['mail_port']; $mail->Username = $config['mail_user']; $mail->Password = $config['mail_password']; $mail->SetFrom($config['mail_from'], $config['site_name']); $mail->AddAddress($tomail); $mail->IsHTML(true); $mail->Subject = $subject; $mail->Body = $body; if (!$mail->Send()) { return false; } else { return true; } } function delattach($map = '') { $model = M('Attachment'); $att = $model->field('aid,filepath')->where($map)->select(); $aids = array(); foreach ((array)$att as $key => $r) { $aids[] = $r['aid']; @unlink($_SERVER['DOCUMENT_ROOT'] . __ROOT__ . $r['filepath']); } $r = $model->delete(implode(',', $aids)); return false !== $r ? true : false; } function template_file($module = '', $path = '', $ext = 'html') { $sysConfig = F('sys.config'); $path = $path ? $path : TMPL_PATH . 'Home/' . $sysConfig['DEFAULT_THEME'] . '/'; $tempfiles = dir_list($path, $ext); foreach ($tempfiles as $key => $file) { $dirname = basename($file); if ($module) { if (strstr($dirname, $module . '_')) { $arr[$key]['name'] = substr($dirname, 0, strrpos($dirname, '.')); $arr[$key]['value'] = substr($arr[$key]['name'], strpos($arr[$key]['name'], '_') + 1); $arr[$key]['filename'] = $dirname; $arr[$key]['filepath'] = $file; } } else { $arr[$key]['name'] = substr($dirname, 0, strrpos($dirname, '.')); $arr[$key]['value'] = substr($arr[$key]['name'], strpos($arr[$key]['name'], '_') + 1); $arr[$key]['filename'] = $dirname; $arr[$key]['filepath'] = $file; } } return $arr; } function fileext($filename) { return strtolower(trim(substr(strrchr($filename, '.'), 1, 10))); } function dir_path($path) { $path = str_replace('\\', '/', $path); if (substr($path, -1) != '/') $path = $path . '/'; return $path; } function dir_create($path, $mode = 0777) { if (is_dir($path)) return TRUE; $ftp_enable = 0; $path = dir_path($path); $temp = explode('/', $path); $cur_dir = ''; $max = count($temp) - 1; for ($i = 0; $i < $max; $i++) { $cur_dir .= $temp[$i] . '/'; if (@is_dir($cur_dir)) continue; @mkdir($cur_dir, $mode, true); @chmod($cur_dir, $mode); } return is_dir($path); } function mk_dir($dir, $mode = 0777) { if (is_dir($dir) || @mkdir($dir, $mode)) return true; if (!mk_dir(dirname($dir), $mode)) return false; return @mkdir($dir, $mode); } function dir_copy($fromdir, $todir) { $fromdir = dir_path($fromdir); $todir = dir_path($todir); if (!is_dir($fromdir)) return FALSE; if (!is_dir($todir)) dir_create($todir); $list = glob($fromdir . '*'); if (!empty($list)) { foreach ($list as $v) { $path = $todir . basename($v); if (is_dir($v)) { dir_copy($v, $path); } else { copy($v, $path); @chmod($path, 0777); } } } return TRUE; } function dir_list($path, $exts = '', $list = array()) { $path = dir_path($path); $files = glob($path . '*'); foreach ($files as $v) { $fileext = fileext($v); if (!$exts || preg_match("/\.($exts)/i", $v)) { $list[] = $v; if (is_dir($v)) { $list = dir_list($v, $exts, $list); } } } return $list; } function dir_tree($dir, $parentid = 0, $dirs = array()) { if ($parentid == 0) $id = 0; $list = glob($dir . '*'); foreach ($list as $v) { if (is_dir($v)) { $id++; $dirs[$id] = array('id' => $id, 'parentid' => $parentid, 'name' => basename($v), 'dir' => $v . '/'); $dirs = dir_tree($v . '/', $id, $dirs); } } return $dirs; } function dir_delete($dir) { if (!is_dir($dir)) return FALSE; $handle = opendir($dir); while (($file = readdir($handle)) !== false) { if ($file == '.' || $file == '..') continue; $d = $dir . DIRECTORY_SEPARATOR . $file; is_dir($d) ? dir_delete($d) : @unlink($d); } closedir($handle); return @rmdir($dir); } function toDate($time, $format = 'Y-m-d H:i:s') { if (empty ($time)) { return ''; } $format = str_replace('#', ':', $format); return date($format, $time); } function savecache($name = '', $id = '') { unlink(RUNTIME_FILE); $Model = M($name); if ($name == 'Lang') { $list = $Model->order('listorder')->select(); $pkid = $Model->getPk(); $data = array(); foreach ($list as $key => $val) { $data [$val ['mark']] = $val; } F($name, $data); } elseif ($name == 'Module') { $list = $Model->order('listorder')->select(); $pkid = $Model->getPk(); $data = array(); foreach ($list as $key => $val) { $data [$val [$pkid]] = $val; $smalldata[$val['name']] = $val [$pkid]; } F($name, $data); F('Mod', $smalldata); } elseif ($name == 'Config') { $list = $Model->select(); $data = $sysdata = $temp = $memberconfig = array(); foreach ($list as $key => $r) { if ($r['groupid'] == 6) { $sysdata[$r['varname']] = $r['value']; } elseif ($r['groupid'] == 3) { if (APP_LANG) $memberconfig_temp[$r['lang']][$r['varname']] = $r['value']; else $memberconfig[$r['varname']] = $r['value']; } else { if (APP_LANG) if ($r['lang']) { $temp[$r['lang']][$r['varname']] = $r['value']; } else { $data[$r['varname']] = $r['value']; } else $data[$r['varname']] = $r['value']; } } if (APP_LANG) { $lang = F('Lang'); foreach ((array)$lang as $key => $r) { $data1 = array(); $data1 = array_merge($temp[$r['id']], $data); F('Config_' . $key, $data1); F('member.config_' . $key, $memberconfig_temp[$r['id']]); if (empty($data1['HOME_ISHTML'])) { @unlink('./index.html'); @unlink('./' . $key . '/index.html'); } } } else { F('Config', $data); F('member.config', $memberconfig); if (empty($data['HOME_ISHTML'])) @unlink('./index.html'); } $langs = M('Lang')->field('mark')->select(); foreach ((array)$langs as $r) $lang1[] = $r['mark']; $sysdata['LANG_LIST'] = 'zh-cn,' . implode(',', $lang1); F('sys.config', $sysdata); } elseif ($name == 'Category') { $data = $smalldata = $temp = array(); if (APP_LANG) { $lang = F('Lang'); foreach ((array)$lang as $key => $r) { $langid = $r['id']; if ($langid) { $lang = $key; $list = $Model->where('lang=' . $langid)->order('listorder')->select(); $pkid = $Model->getPk(); $data = array(); foreach ($list as $key => $val) { $data [$val [$pkid]] = $val; $smalldata[$val['catdir']] = $val [$pkid]; } F('Category_' . $lang, $data); F('Cat_' . $lang, $smalldata); } } } else { $list = $Model->order('listorder')->select(); $pkid = $Model->getPk(); $data = array(); foreach ($list as $key => $val) { $data [$val [$pkid]] = $val; $smalldata[$val['catdir']] = $val [$pkid]; } F($name, $data); F('Cat', $smalldata); } } elseif ($name == 'Field') { if ($id) { $list = $Model->order('listorder')->where('moduleid=' . $id)->select(); $pkid = 'field'; $data = array(); foreach ($list as $key => $val) { $data [$val [$pkid]] = $val; } $name = $id . '_' . $name; F($name, $data); } else { $module = F('Module'); foreach ($module as $key => $val) { savecache($name, $key); } } } elseif ($name == 'Dbsource') { $list = $Model->select(); $data = array(); foreach ($list as $key => $val) { $data [$val ['name']] = $val; } F($name, $data); } else { $list = $Model->order('listorder')->select(); $pkid = $Model->getPk(); $data = array(); foreach ($list as $key => $val) { $data [$val [$pkid]] = $val; } F($name, $data); if ($name == 'Urlrule') { $config = F('sys.config'); if ($config['URL_URLRULE']) routes_cache($config['URL_URLRULE']); } } return true; } function checkfield($fields, $postdata) { foreach ($postdata as $key => $val) { $setup = $fields[$key]['setup']; if (!empty($fields[$key]['required']) && empty($postdata[$key])) return ''; if ($setup['multiple'] || $setup['inputtype'] == 'checkbox' || $fields[$key]['type'] == 'checkbox') { $postdata[$key] = implode(',', $postdata[$key]); $postdata[$key] = safe_replace(strip_tags($postdata[$key])); } elseif ($fields[$key]['type'] == 'datetime') { $postdata[$key] = strtotime($postdata[$key]); } elseif ($fields[$key]['type'] == 'textarea') { $postdata[$key] = addslashes_array($postdata[$key]); } elseif ($fields[$key]['type'] == 'images' || $fields[$key]['type'] == 'files') { $name = $key . '_name'; $arrdata = array(); foreach ($postdata[$key] as $k => $res) { if (!empty($postdata[$key][$k])) $arrdata[] = safe_replace(strip_tags($postdata[$key][$k] . '|' . $postdata[$name][$k])); } $postdata[$key] = implode(':::', $arrdata); } elseif ($fields[$key]['type'] == 'editor') { if (isset($postdata['add_description']) && $postdata['description'] == '' && isset($postdata['content'])) { $content = stripslashes($postdata['content']); $description_length = intval($postdata['description_length']); $postdata['description'] = str_cut(str_replace(array("\r\n", "\t", '[page]', '[/page]', '“', '”'), '', strip_tags($content)), $description_length); $postdata['description'] = addslashes_array($postdata['description']); } if (isset($postdata['auto_thumb']) && $postdata['thumb'] == '' && isset($postdata['content'])) { $content = $content ? $content : stripslashes($postdata['content']); $auto_thumb_no = intval($postdata['auto_thumb_no']) * 3; if (preg_match_all("/(src)=([\"|']?)([^ \"'>]+\.(gif|jpg|jpeg|bmp|png))\\2/i", $content, $matches)) { $postdata['thumb'] = $matches[$auto_thumb_no][0]; } } } elseif ($fields[$key]['type'] == 'title' || $fields[$key]['type'] == 'text') { $postdata[$key] = safe_replace(strip_tags($postdata[$key])); } } return $postdata; } function string2array($info) { if ($info == '') return array(); $info = stripcslashes($info); eval("\$r = $info;"); return $r; } function array2string($info) { if ($info == '') return ''; if (!is_array($info)) $string = stripslashes($info); foreach ($info as $key => $val) $string[$key] = stripslashes($val); return addslashes(var_export($string, TRUE)); } function rand_string($len = 6, $type = '', $addChars = '') { $str = ''; switch ($type) { case 0 : $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' . $addChars; break; case 1 : $chars = str_repeat('0123456789', 3); break; case 2 : $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' . $addChars; break; case 3 : $chars = 'abcdefghijklmnopqrstuvwxyz' . $addChars; break; default : $chars = 'ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789' . $addChars; break; } if ($len > 10) { $chars = $type == 1 ? str_repeat($chars, $len) : str_repeat($chars, 5); } if ($type != 4) { $chars = str_shuffle($chars); $str = substr($chars, 0, $len); } else { for ($i = 0; $i < $len; $i++) { $str .= msubstr($chars, floor(mt_rand(0, mb_strlen($chars, 'utf-8') - 1)), 1); } } return $str; } function sysmd5($str, $key = '', $type = 'sha1') { $key = $key ? $key : C('ADMIN_ACCESS'); return hash($type, $str . $key); } function pwdHash($password, $type = 'md5') { return hash($type, $password); } function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { $ckey_length = 4; $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 str_cut($sourcestr, $cutlength, $suffix = '...') { $str_length = strlen($sourcestr); if ($str_length <= $cutlength) { return $sourcestr; } $returnstr = ''; $n = $i = $noc = 0; while ($n < $str_length) { $t = ord($sourcestr[$n]); if ($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) { $i = 1; $n++; $noc++; } elseif (194 <= $t && $t <= 223) { $i = 2; $n += 2; $noc += 2; } elseif (224 <= $t && $t <= 239) { $i = 3; $n += 3; $noc += 2; } elseif (240 <= $t && $t <= 247) { $i = 4; $n += 4; $noc += 2; } elseif (248 <= $t && $t <= 251) { $i = 5; $n += 5; $noc += 2; } elseif ($t == 252 || $t == 253) { $i = 6; $n += 6; $noc += 2; } else { $n++; } if ($noc >= $cutlength) { break; } } if ($noc > $cutlength) { $n -= $i; } $returnstr = substr($sourcestr, 0, $n); if (substr($sourcestr, $n, 6)) { $returnstr = $returnstr . $suffix; } return $returnstr; } function IP($ip = '', $file = 'UTFWry.dat') { import("@.ORG.IpLocation"); $iplocation = new IpLocation($file); $location = $iplocation->getlocation($ip); return $location; } function byte_format($input, $dec = 0) { $prefix_arr = array("B", "K", "M", "G", "T"); $value = round($input, $dec); $i = 0; while ($value > 1024) { $value /= 1024; $i++; } $return_str = round($value, $dec) . $prefix_arr[$i]; return $return_str; } function build_verify($length = 4, $mode = 1) { return rand_string($length, $mode); } function make_urlrule($url, $lang, $action, $MOREREQUEST = '') { preg_match_all("/{([\w\$]+)}/", $url, $matches); if (strstr($url, '{$parentdir') && C('URL_PATHINFO_DEPR') == '/') { if (APP_LANG) { foreach ((array)$lang as $r) { $Category = F('Category_' . $r); foreach ((array)$Category as $key => $r) { if ($r['parentid'] == 0) $pcatdir[] = $r['catdir']; } } } else { $Category = F('Category'); foreach ((array)$Category as $key => $r) { if ($r['parentid'] == 0) $pcatdir[] = $r['catdir']; } } unset($Category); $parent_rule = '(' . implode('|', $pcatdir) . ')\/'; } $REQUEST = str_replace(array('{$parentdir}', '{$module}', '{$moduleid}', '{$catdir}', '{$year}', '{$month}', '{$day}', '{$catid}', '{$id}', '{$page}'), array('', 'module', 'moduleid', 'catdir', 'year', 'month', 'day', 'catid', 'id', C('VAR_PAGE')), $matches[0]); $rule = str_replace(array('{$parentdir}', '{$module}', '{$moduleid}', '{$catdir}', '{$year}', '{$month}', '{$day}', '{$catid}', '{$id}', '{$page}', '/', C('URL_HTML_SUFFIX')), array('', '([A-Z]{1}[a-z]+)', '(\d+)', '([\w^_]+)', '(\d+)', '(\d+)', '(\d+)', '(\d+)', '(\d+)', '(\d+)', '\/', ''), $url); $i = 0; $j = 1; $k = 2; $n = 3; $m = 4; foreach ($REQUEST as $key => $r) { if ($r) { $i = $i + 1; $request .= $r . '=:' . $i . '&'; $j = $j + 1; $request_lang .= $r . '=:' . $j . '&'; $k = $k + 1; $request_lang_2 .= $r . '=:' . $k . '&'; $n = $n + 1; $request_lang_3 .= $r . '=:' . $n . '&'; } } if (APP_LANG) { $langrule = '(' . implode('|', $lang) . ')\/'; if ($parent_rule) { $data[] = '\'/^' . $langrule . $parent_rule . '([\w^_]+)\/' . $rule . '$/\' => \'Urlrule/' . $action . '?l=:1&parentdir=:2&' . $request_lang_3 . $MOREREQUEST . $langrequest . '\''; $data[] = '\'/^' . $langrule . $parent_rule . $rule . '$/\' => \'Urlrule/' . $action . '?l=:1&parentdir=:2&' . $request_lang_2 . $MOREREQUEST . $langrequest . '\''; $data[] = '\'/^' . $parent_rule . '([\w^_]+)\/' . $rule . '$/\' => \'Urlrule/' . $action . '?parentdir=:1&' . $request_lang_2 . $MOREREQUEST . $langrequest . '\''; $data[] = '\'/^' . $parent_rule . $rule . '$/\' => \'Urlrule/' . $action . '?parentdir=:1&' . $request_lang . $MOREREQUEST . $langrequest . '\''; if (strstr($url, '{$page')) { $data[] = '\'/^' . $langrule . $parent_rule . '(\d+)$/\' => \'Urlrule/' . $action . '?l=:1&catdir=:2&p=:3\''; $data[] = '\'/^' . $parent_rule . '(\d+)$/\' => \'Urlrule/' . $action . '?catdir=:1&p=:2\''; } else { $data[] = '\'/^' . $langrule . $parent_rule . '$/\' => \'Urlrule/' . $action . '?l=:1&catdir=:2\''; $data[] = '\'/^' . $parent_rule . '$/\' => \'Urlrule/' . $action . '?catdir=:1\''; } } else { $data[] = '\'/^' . $langrule . $rule . '$/\' => \'Urlrule/' . $action . '?l=:1&' . $request_lang . $MOREREQUEST . $langrequest . '\''; $data[] = '\'/^' . $rule . '$/\' => \'Urlrule/' . $action . '?' . $request . $MOREREQUEST . '\''; } $data = str_replace('\/$', '$', $data); $data = implode(",\n", $data); } else { if ($parent_rule) { $data[] = '\'/^' . $parent_rule . '([\w^_]+)\/' . $rule . '$/\' => \'Urlrule/' . $action . '?parentdir=:1&' . $request_lang_2 . $MOREREQUEST . $langrequest . '\''; $data[] = '\'/^' . $parent_rule . $rule . '$/\' => \'Urlrule/' . $action . '?parentdir=:1&' . $request_lang . $MOREREQUEST . $langrequest . '\''; if (strstr($url, '{$page')) { $data[] = '\'/^' . $parent_rule . '(\d+)$/\' => \'Urlrule/' . $action . '?catdir=:1&p=:2\''; } else { $data[] = '\'/^' . $parent_rule . '$/\' => \'Urlrule/' . $action . '?catdir=:1\''; } } else { $urlrule = '\'/^' . $rule . '$/\' => \'Urlrule/' . $action . '?' . $request . $MOREREQUEST . '\''; $data = str_replace('\/$', '$', $urlrule); } } return $data; } function routes_cache($URL_URLRULE = '') { $urlstr .= '\':l' . C('URL_PATHINFO_DEPR') . 'Tags' . C('URL_PATHINFO_DEPR') . ':module' . C('URL_PATHINFO_DEPR') . ':tag' . C('URL_PATHINFO_DEPR') . ':p\' => \'Home/Tags/index\',' . "\n"; $urlstr .= '\':l' . C('URL_PATHINFO_DEPR') . 'Tags' . C('URL_PATHINFO_DEPR') . ':tag' . C('URL_PATHINFO_DEPR') . ':p\' => \'Home/Tags/index\',' . "\n"; $urlstr .= '\':l' . C('URL_PATHINFO_DEPR') . 'Tags' . C('URL_PATHINFO_DEPR') . ':module' . C('URL_PATHINFO_DEPR') . ':tag\' => \'Home/Tags/index\',' . "\n"; $urlstr .= '\':l' . C('URL_PATHINFO_DEPR') . 'Tags' . C('URL_PATHINFO_DEPR') . ':p\d\' => \'Home/Tags/index\',' . "\n"; $urlstr .= '\':l' . C('URL_PATHINFO_DEPR') . 'Tags' . C('URL_PATHINFO_DEPR') . ':tag\' => \'Home/Tags/index\',' . "\n"; $urlstr .= '\':l' . C('URL_PATHINFO_DEPR') . 'Tags\' => \'Home/Tags/index\',' . "\n"; $urlstr .= '\'Tags' . C('URL_PATHINFO_DEPR') . ':module' . C('URL_PATHINFO_DEPR') . ':tag' . C('URL_PATHINFO_DEPR') . ':p\' => \'Home/Tags/index\',' . "\n"; $urlstr .= '\'Tags' . C('URL_PATHINFO_DEPR') . ':tag' . C('URL_PATHINFO_DEPR') . ':p\' => \'Home/Tags/index\',' . "\n"; $urlstr .= '\'Tags' . C('URL_PATHINFO_DEPR') . ':module' . C('URL_PATHINFO_DEPR') . ':tag\' => \'Home/Tags/index\',' . "\n"; $urlstr .= '\'Tags' . C('URL_PATHINFO_DEPR') . ':p\d\' => \'Home/Tags/index\',' . "\n"; $urlstr .= '\'Tags' . C('URL_PATHINFO_DEPR') . ':tag\' => \'Home/Tags/index\',' . "\n"; $urlstr .= '\'Tags\' => \'Home/Tags/index\',' . "\n"; if (APP_LANG) { $Lang = F('Lang'); foreach ((array)$Lang as $key => $r) { $langarr[] = $key; } $urlstr .= '\'/^(' . implode('|', $langarr) . ')$/\' => \'Index/index?l=:1\',' . "\n"; } $urlstr .= '\'/^([\w^_]+)\/(\d+)\/([0-9]+)$/\' => \'Urlrule/index?catdir=:1&id=:2&p=:3&\','."\n"; $URL_URLRULE = $URL_URLRULE ? $URL_URLRULE : C('URL_URLRULE'); $urlrule = is_array($URL_URLRULE) ? $URL_URLRULE : explode(':::', $URL_URLRULE); $list = explode('|', $urlrule[1]); $show = explode('|', $urlrule[0]); $listurls[] = make_urlrule($show[1], $langarr, 'show'); $listurls[] = make_urlrule($show[0], $langarr, 'show'); $listurls[] = make_urlrule($list[1], $langarr, 'index'); $listurls[] = make_urlrule($list[0], $langarr, 'index'); $url = implode(",\n", $listurls); file_put_contents(DATA_PATH . 'Routes.php', ""); if (is_file(RUNTIME_PATH . '~runtime.php')) @unlink(RUNTIME_PATH . '~runtime.php'); if (is_file(RUNTIME_PATH . '~allinone.php')) @unlink(RUNTIME_PATH . '~allinone.php'); } function HOMEURL($lang) { if (C('URL_M') == 1) $index = '/index.php/'; $lang = C('URL_LANG') != $lang ? $lang : ''; if (C('URL_M') > 0) { $url = $lang ? __ROOT__ . $index . $lang . '/' : __ROOT__ . '/'; } else { if (C('HOME_ISHTML')) { $url = $lang ? '/' . $lang . '/' : '/'; } else { $url = $lang ? __ROOT__ . '/index.php?l=' . $lang : __ROOT__ . '/'; } } return $url; } function URL($url = '', $params = array()) { if (APP_LANG) $lang = getlang(); if (!empty($url)) { list($path, $query) = explode('?', $url); list($group, $a) = explode('/', $path); list($g, $m) = explode('-', $group); $params = http_build_query($params); $params = !empty($params) ? '&' . $params : ''; $query = !empty($query) ? '&' . $query : ''; if ($lang) $langurl = '&l=' . $lang; if (strcasecmp($g, 'Home') == 0) { $url = __ROOT__ . '/index.php?m=' . $m . '&a=' . $a . $query . $params . $langurl; } else { $url = __ROOT__ . '/index.php?g=' . $g . '&m=' . $m . '&a=' . $a . $query . $params . $langurl; } } else { if (C('URL_M') == 1) $index = '/index.php/'; if (C('URL_M') > 0) { $url = $lang ? __ROOT__ . $index . $lang . '/' : __ROOT__ . '/'; } else { $url = $lang ? __ROOT__ . '/index.php?l=' . $lang : __ROOT__ . '/'; } } return $url; } function TAGURL($data, $p = '') { $index = C('URL_M') == 1 ? __ROOT__ . 'index.php/' : __ROOT__ . '/'; if (APP_LANG) $lang = getlang(); if (C('URL_M') == 0) { if ($data['moduleid'] > 0 && $data['moduleid'] != 2) $params['moduleid'] = $data['moduleid']; if ($data['slug']) $params['tag'] = $data['slug']; if ($lang) $params['l'] = $lang; $url = URL('Home-Tags/index', $params); if ($p) $url = $url . '&p={$page}'; } else { $tag = $data['slug'] ? '/' . $data['slug'] : ''; $module = ($data['moduleid'] > 0 && $data['moduleid'] != 2) ? '/' . $data['module'] : ''; $langurl = $lang ? $lang . '/' : ''; $url = $index . $langurl . 'Tags' . $module . $tag . '/'; if ($p) $url = $url . '{$page}' . C('URL_HTML_SUFFIX'); } return $url; } function getlang($have = '') { if ($have) { if (strcasecmp(GROUP_NAME, 'Admin') == 0) $lang = LANG_NAME; else $lang = $_REQUEST['l'] ? $_REQUEST['l'] : C('URL_LANG'); } else { if (strcasecmp(GROUP_NAME, 'Admin') == 0) $lang = C('URL_LANG') != LANG_NAME ? LANG_NAME : ''; else $lang = $_REQUEST['l'] && C('URL_LANG') != $_REQUEST['l'] ? $_REQUEST['l'] : ''; } return $lang; } function geturl($cat, $data = '', $Urlrule = '') { $id = $data['id']; $URL_MODEL = C('URL_M'); if (APP_LANG) $lang = getlang(); $parentdir = $cat['parentdir']; $catdir = $cat['catdir']; $year = date('Y', $data['createtime']); $month = date('m', $data['createtime']); $day = date('d', $data['createtime']); $module = $cat['module']; $moduleid = $cat['moduleid']; $catid = $cat['id']; if ($cat['ishtml']) { if ($cat['urlruleid'] && $Urlrule) { $showurlrule = $Urlrule[$cat['urlruleid']]['showurlrule']; $listurlrule = $Urlrule[$cat['urlruleid']]['listurlrule']; } else { echo 'This cat has not urlruleid or no Urlrule.'; exit; } } else { if ($URL_MODEL == 0) { $langurl = $lang ? '&l=' . LANG_NAME : ''; if ($id) { $url[] = U("Home/$cat[module]/show?id=$id" . $langurl); $url[] = U("Home/$cat[module]/show?id=" . $id . $langurl . '&' . C('VAR_PAGE') . '={$page}'); } else { $url[] = U("Home/$cat[module]/index?id=$cat[id]" . $langurl); $url[] = U("Home/$cat[module]/index?id=$cat[id]$langurl&" . C('VAR_PAGE') . '={$page}'); } $urls = str_replace('g=Admin&', '', $url); $urls = str_replace('g=Home&', '', $url); } else { $urlrule = explode(':::', C('URL_URLRULE')); $showurlrule = $urlrule[0]; $listurlrule = $urlrule[1]; } } if (empty($urls)) { $index = $URL_MODEL == 1 ? __ROOT__ . '/index.php/' : __ROOT__ . '/'; $langurl = $lang ? $lang . '/' : ''; if ($id) { $urls = str_replace(array('{$parentdir}', '{$module}', '{$moduleid}', '{$catdir}', '{$year}', '{$month}', '{$day}', '{$catid}', '{$id}'), array($parentdir, $module, $moduleid, $catdir, $year, $month, $day, $catid, $id), $showurlrule); } else { $urls = str_replace(array('{$parentdir}', '{$module}', '{$moduleid}', '{$catdir}', '{$year}', '{$month}', '{$day}', '{$catid}', '{$id}'), array($parentdir, $module, $moduleid, $catdir, $year, $month, $day, $catid, $id), $listurlrule); } $urls = explode('|', $urls); $urls[0] = $index . $langurl . $urls[0]; $urls[1] = $index . $langurl . $urls[1]; } return $urls; } function content_pages($num, $p, $pageurls) { $multipage = ''; $page = 11; $offset = 4; $pages = $num; $from = $p - $offset; $to = $p + $offset; $more = 0; if ($page >= $pages) { $from = 2; $to = $pages - 1; } else { if ($from <= 1) { $to = $page - 1; $from = 2; } elseif ($to >= $pages) { $from = $pages - ($page - 2); $to = $pages - 1; } $more = 1; } if ($p > 0) { $perpage = $p == 1 ? 1 : $p - 1; if ($perpage == 1) { $multipage .= '' . L('previous') . ''; } else { $multipage .= '' . L('previous') . ''; } if ($p == 1) { $multipage .= ' 1'; } elseif ($p > 6 && $more) { $multipage .= ' 1..'; } else { $multipage .= ' 1'; } } for ($i = $from; $i <= $to; $i++) { if ($i != $p) { $multipage .= ' ' . $i . ''; } else { $multipage .= ' ' . $i . ''; } } if ($p < $pages) { if ($p < $pages - 5 && $more) { $multipage .= ' ..' . $pages . ' ' . L('next') . ''; } else { $multipage .= ' ' . $pages . ' ' . L('next') . ''; } } elseif ($p == $pages) { $multipage .= ' ' . $pages . ' ' . L('next') . ''; } return $multipage; } function thumb($f, $tw = 300, $th = 300, $autocat = 0, $nopic = 'nopic.jpg', $t = '') { if (strstr($f, '://')) return $f; if (empty($f)) return __ROOT__ . '/Public/Images/' . $nopic; $f = '.' . str_replace(__ROOT__, '', $f); $temp = array(1 => 'gif', 2 => 'jpeg', 3 => 'png'); list($fw, $fh, $tmp) = getimagesize($f); if (empty($t)) { if ($fw > $tw && $fh > $th) { $pathinfo = pathinfo($f); $t = $pathinfo['dirname'] . '/thumb_' . $tw . '_' . $th . '_' . $pathinfo['basename']; if (is_file($t)) { return __ROOT__ . substr($t, 1); } } else { return __ROOT__ . substr($f, 1); } } if (!$temp[$tmp]) { return false; } if ($autocat) { if ($fw / $tw > $fh / $th) { $fw = $tw * ($fh / $th); } else { $fh = $th * ($fw / $tw); } } else { $scale = min($tw / $fw, $th / $fh); if ($scale >= 1) { $tw = $fw; $th = $fh; } else { $tw = (int)($fw * $scale); $th = (int)($fh * $scale); } } $tmp = $temp[$tmp]; $infunc = "imagecreatefrom$tmp"; $outfunc = "image$tmp"; $fimg = $infunc($f); if ($tmp != 'gif' && function_exists('imagecreatetruecolor')) { $timg = imagecreatetruecolor($tw, $th); } else { $timg = imagecreate($tw, $th); } if (function_exists('imagecopyresampled')) imagecopyresampled($timg, $fimg, 0, 0, 0, 0, $tw, $th, $fw, $fh); else imagecopyresized($timg, $fimg, 0, 0, 0, 0, $tw, $th, $fw, $fh); if ($tmp == 'gif' || $tmp == 'png') { $background_color = imagecolorallocate($timg, 0, 255, 0); imagecolortransparent($timg, $background_color); } $outfunc($timg, $t); imagedestroy($timg); imagedestroy($fimg); return __ROOT__ . substr($t, 1); } function thumb2($f, $tw = 300, $th = 300, $type = 2, $color = '255,255,255', $nopic = 'nopic.jpg', $t = '') { if (strstr($f, '://')) return $f; if (empty($f)) return thumb2(__ROOT__ . '/Public/Images/' . $nopic, $tw, $th); $f = '.' . str_replace(__ROOT__, '', $f); $temp = array(1 => 'gif', 2 => 'jpeg', 3 => 'png'); list($fw, $fh, $tmp) = getimagesize($f); if (empty($t)) { $pathinfo = pathinfo($f); $t = $pathinfo['dirname'] . '/thumb_' . $tw . '_' . $th . '_' . $pathinfo['basename']; if (is_file($t)) { return __ROOT__ . substr($t, 1); } } if (!$temp[$tmp]) { return false; } import("@.ORG.Util.Image.ThinkImage"); $color = explode(',', $color); $image = new ThinkImage(THINKIMAGE_GD, $f, $color); $image->thumb($tw, $th, $type)->save($t); return __ROOT__ . substr($t, 1); } function ubb2html($sUBB) { $sHtml = $sUBB; global $emotPath, $cnum, $arrcode, $bUbb2htmlFunctionInit; $cnum = 0; $arrcode = array(); $emotPath = '../xheditor_emot/'; if (!$bUbb2htmlFunctionInit) { function saveCodeArea($match) { global $cnum, $arrcode; $cnum++; $arrcode[$cnum] = $match[0]; return "[\tubbcodeplace_" . $cnum . "\t]"; } } $sHtml = preg_replace_callback('/\[code\s*(?:=\s*((?:(?!")[\s\S])+?)(?:"[\s\S]*?)?)?\]([\s\S]*?)\[\/code\]/i', 'saveCodeArea', $sHtml); $sHtml = preg_replace("/&/", '&', $sHtml); $sHtml = preg_replace("//", '>', $sHtml); $sHtml = preg_replace("/\r?\n/", '
', $sHtml); $sHtml = preg_replace("/\[(\/?)(b|u|i|s|sup|sub)\]/i", '<$1$2>', $sHtml); $sHtml = preg_replace('/\[color\s*=\s*([^\]"]+?)(?:"[^\]]*?)?\s*\]/i', '', $sHtml); if (!$bUbb2htmlFunctionInit) { function getSizeName($match) { $arrSize = array('10px', '13px', '16px', '18px', '24px', '32px', '48px'); if (preg_match("/^\d+$/", $match[1])) $match[1] = $arrSize[$match[1] - 1]; return ''; } } $sHtml = preg_replace_callback('/\[size\s*=\s*([^\]"]+?)(?:"[^\]]*?)?\s*\]/i', 'getSizeName', $sHtml); $sHtml = preg_replace('/\[font\s*=\s*([^\]"]+?)(?:"[^\]]*?)?\s*\]/i', '', $sHtml); $sHtml = preg_replace('/\[back\s*=\s*([^\]"]+?)(?:"[^\]]*?)?\s*\]/i', '', $sHtml); $sHtml = preg_replace("/\[\/(color|size|font|back)\]/i", '', $sHtml); for ($i = 0; $i < 3; $i++) $sHtml = preg_replace('/\[align\s*=\s*([^\]"]+?)(?:"[^\]]*?)?\s*\](((?!\[align(?:\s+[^\]]+)?\])[\s\S])*?)\[\/align\]/', '

$2

', $sHtml); $sHtml = preg_replace('/\[img\]\s*(((?!")[\s\S])+?)(?:"[\s\S]*?)?\s*\[\/img\]/i', '', $sHtml); if (!$bUbb2htmlFunctionInit) { function getImg($match) { $alt = $match[1]; $p1 = $match[2]; $p2 = $match[3]; $p3 = $match[4]; $src = $match[5]; $a = $p3 ? $p3 : (!is_numeric($p1) ? $p1 : ''); return '' . $alt . ''; } } $sHtml = preg_replace_callback('/\[img\s*=([^,\]]*)(?:\s*,\s*(\d*%?)\s*,\s*(\d*%?)\s*)?(?:,?\s*(\w+))?\s*\]\s*(((?!")[\s\S])+?)(?:"[\s\S]*)?\s*\[\/img\]/i', 'getImg', $sHtml); if (!$bUbb2htmlFunctionInit) { function getEmot($match) { global $emotPath; $arr = split(',', $match[1]); if (!isset($arr[1])) { $arr[1] = $arr[0]; $arr[0] = 'default'; } $path = $emotPath . $arr[0] . '/' . $arr[1] . '.gif'; return '' . $arr[1] . ''; } } $sHtml = preg_replace_callback('/\[emot\s*=\s*([^\]"]+?)(?:"[^\]]*?)?\s*\/\]/i', 'getEmot', $sHtml); $sHtml = preg_replace('/\[url\]\s*(((?!")[\s\S])*?)(?:"[\s\S]*?)?\s*\[\/url\]/i', '$1', $sHtml); $sHtml = preg_replace('/\[url\s*=\s*([^\]"]+?)(?:"[^\]]*?)?\s*\]\s*([\s\S]*?)\s*\[\/url\]/i', '$2', $sHtml); $sHtml = preg_replace('/\[email\]\s*(((?!")[\s\S])+?)(?:"[\s\S]*?)?\s*\[\/email\]/i', '$1', $sHtml); $sHtml = preg_replace('/\[email\s*=\s*([^\]"]+?)(?:"[^\]]*?)?\s*\]\s*([\s\S]+?)\s*\[\/email\]/i', '$2', $sHtml); $sHtml = preg_replace("/\[quote\]([\s\S]*?)\[\/quote\]/i", '
$1
', $sHtml); if (!$bUbb2htmlFunctionInit) { function getFlash($match) { $w = $match[1]; $h = $match[2]; $url = $match[3]; if (!$w) $w = 480; if (!$h) $h = 400; return ''; } } $sHtml = preg_replace_callback('/\[flash\s*(?:=\s*(\d+)\s*,\s*(\d+)\s*)?\]\s*(((?!")[\s\S])+?)(?:"[\s\S]*?)?\s*\[\/flash\]/i', 'getFlash', $sHtml); if (!$bUbb2htmlFunctionInit) { function getMedia($match) { $w = $match[1]; $h = $match[2]; $play = $match[3]; $url = $match[4]; if (!$w) $w = 480; if (!$h) $h = 400; return ''; } } $sHtml = preg_replace_callback('/\[media\s*(?:=\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d+)\s*)?)?\]\s*(((?!")[\s\S])+?)(?:"[\s\S]*?)?\s*\[\/media\]/i', 'getMedia', $sHtml); if (!$bUbb2htmlFunctionInit) { function getTable($match) { return ''; } } $sHtml = preg_replace_callback('/\[table\s*(?:=(\d{1,4}%?)\s*(?:,\s*([^\]"]+)(?:"[^\]]*?)?)?)?\s*\]/i', 'getTable', $sHtml); if (!$bUbb2htmlFunctionInit) { function getTR($match) { return ''; } } $sHtml = preg_replace_callback('/\[tr\s*(?:=(\s*[^\]"]+))?(?:"[^\]]*?)?\s*\]/i', 'getTR', $sHtml); if (!$bUbb2htmlFunctionInit) { function getTD($match) { $col = isset($match[1]) ? $match[1] : 0; $row = isset($match[2]) ? $match[2] : 0; $w = isset($match[3]) ? $match[3] : null; return ' 1 ? ' colspan="' . $col . '"' : '') . ($row > 1 ? ' rowspan="' . $row . '"' : '') . ($w ? ' width="' . $w . '"' : '') . '>'; } } $sHtml = preg_replace_callback("/\[td\s*(?:=\s*(\d{1,2})\s*,\s*(\d{1,2})\s*(?:,\s*(\d{1,4}%?))?)?\s*\]/i", 'getTD', $sHtml); $sHtml = preg_replace("/\[\/(table|tr|td)\]/i", '', $sHtml); $sHtml = preg_replace("/\[\*\]((?:(?!\[\*\]|\[\/list\]|\[list\s*(?:=[^\]]+)?\])[\s\S])+)/i", '
  • $1
  • ', $sHtml); if (!$bUbb2htmlFunctionInit) { function getUL($match) { $str = ''; } } $sHtml = preg_replace_callback('/\[list\s*(?:=\s*([^\]"]+))?(?:"[^\]]*?)?\s*\]/i', 'getUL', $sHtml); $sHtml = preg_replace("/\[\/list\]/i", '', $sHtml); $sHtml = preg_replace("/\[hr\/\]/i", '
    ', $sHtml); for ($i = 1; $i <= $cnum; $i++) $sHtml = str_replace("[\tubbcodeplace_" . $i . "\t]", $arrcode[$i], $sHtml); if (!$bUbb2htmlFunctionInit) { function fixText($match) { $text = $match[2]; $text = preg_replace("/\t/", '        ', $text); $text = preg_replace("/ /", ' ', $text); return $match[1] . $text; } } $sHtml = preg_replace_callback('/(^|<\/?\w+(?:\s+[^>]*?)?>)([^<$]+)/i', 'fixText', $sHtml); $bUbb2htmlFunctionInit = true; return $sHtml; } function Pinyin($_String) { $_DataKey = "a|ai|an|ang|ao|ba|bai|ban|bang|bao|bei|ben|beng|bi|bian|biao|bie|bin|bing|bo|bu|ca|cai|can|cang|cao|ce|ceng|cha" . "|chai|chan|chang|chao|che|chen|cheng|chi|chong|chou|chu|chuai|chuan|chuang|chui|chun|chuo|ci|cong|cou|cu|" . "cuan|cui|cun|cuo|da|dai|dan|dang|dao|de|deng|di|dian|diao|die|ding|diu|dong|dou|du|duan|dui|dun|duo|e|en|er" . "|fa|fan|fang|fei|fen|feng|fo|fou|fu|ga|gai|gan|gang|gao|ge|gei|gen|geng|gong|gou|gu|gua|guai|guan|guang|gui" . "|gun|guo|ha|hai|han|hang|hao|he|hei|hen|heng|hong|hou|hu|hua|huai|huan|huang|hui|hun|huo|ji|jia|jian|jiang" . "|jiao|jie|jin|jing|jiong|jiu|ju|juan|jue|jun|ka|kai|kan|kang|kao|ke|ken|keng|kong|kou|ku|kua|kuai|kuan|kuang" . "|kui|kun|kuo|la|lai|lan|lang|lao|le|lei|leng|li|lia|lian|liang|liao|lie|lin|ling|liu|long|lou|lu|lv|luan|lue" . "|lun|luo|ma|mai|man|mang|mao|me|mei|men|meng|mi|mian|miao|mie|min|ming|miu|mo|mou|mu|na|nai|nan|nang|nao|ne" . "|nei|nen|neng|ni|nian|niang|niao|nie|nin|ning|niu|nong|nu|nv|nuan|nue|nuo|o|ou|pa|pai|pan|pang|pao|pei|pen" . "|peng|pi|pian|piao|pie|pin|ping|po|pu|qi|qia|qian|qiang|qiao|qie|qin|qing|qiong|qiu|qu|quan|que|qun|ran|rang" . "|rao|re|ren|reng|ri|rong|rou|ru|ruan|rui|run|ruo|sa|sai|san|sang|sao|se|sen|seng|sha|shai|shan|shang|shao|" . "she|shen|sheng|shi|shou|shu|shua|shuai|shuan|shuang|shui|shun|shuo|si|song|sou|su|suan|sui|sun|suo|ta|tai|" . "tan|tang|tao|te|teng|ti|tian|tiao|tie|ting|tong|tou|tu|tuan|tui|tun|tuo|wa|wai|wan|wang|wei|wen|weng|wo|wu" . "|xi|xia|xian|xiang|xiao|xie|xin|xing|xiong|xiu|xu|xuan|xue|xun|ya|yan|yang|yao|ye|yi|yin|ying|yo|yong|you" . "|yu|yuan|yue|yun|za|zai|zan|zang|zao|ze|zei|zen|zeng|zha|zhai|zhan|zhang|zhao|zhe|zhen|zheng|zhi|zhong|" . "zhou|zhu|zhua|zhuai|zhuan|zhuang|zhui|zhun|zhuo|zi|zong|zou|zu|zuan|zui|zun|zuo"; $_DataValue = "-20319|-20317|-20304|-20295|-20292|-20283|-20265|-20257|-20242|-20230|-20051|-20036|-20032|-20026|-20002|-19990" . "|-19986|-19982|-19976|-19805|-19784|-19775|-19774|-19763|-19756|-19751|-19746|-19741|-19739|-19728|-19725" . "|-19715|-19540|-19531|-19525|-19515|-19500|-19484|-19479|-19467|-19289|-19288|-19281|-19275|-19270|-19263" . "|-19261|-19249|-19243|-19242|-19238|-19235|-19227|-19224|-19218|-19212|-19038|-19023|-19018|-19006|-19003" . "|-18996|-18977|-18961|-18952|-18783|-18774|-18773|-18763|-18756|-18741|-18735|-18731|-18722|-18710|-18697" . "|-18696|-18526|-18518|-18501|-18490|-18478|-18463|-18448|-18447|-18446|-18239|-18237|-18231|-18220|-18211" . "|-18201|-18184|-18183|-18181|-18012|-17997|-17988|-17970|-17964|-17961|-17950|-17947|-17931|-17928|-17922" . "|-17759|-17752|-17733|-17730|-17721|-17703|-17701|-17697|-17692|-17683|-17676|-17496|-17487|-17482|-17468" . "|-17454|-17433|-17427|-17417|-17202|-17185|-16983|-16970|-16942|-16915|-16733|-16708|-16706|-16689|-16664" . "|-16657|-16647|-16474|-16470|-16465|-16459|-16452|-16448|-16433|-16429|-16427|-16423|-16419|-16412|-16407" . "|-16403|-16401|-16393|-16220|-16216|-16212|-16205|-16202|-16187|-16180|-16171|-16169|-16158|-16155|-15959" . "|-15958|-15944|-15933|-15920|-15915|-15903|-15889|-15878|-15707|-15701|-15681|-15667|-15661|-15659|-15652" . "|-15640|-15631|-15625|-15454|-15448|-15436|-15435|-15419|-15416|-15408|-15394|-15385|-15377|-15375|-15369" . "|-15363|-15362|-15183|-15180|-15165|-15158|-15153|-15150|-15149|-15144|-15143|-15141|-15140|-15139|-15128" . "|-15121|-15119|-15117|-15110|-15109|-14941|-14937|-14933|-14930|-14929|-14928|-14926|-14922|-14921|-14914" . "|-14908|-14902|-14894|-14889|-14882|-14873|-14871|-14857|-14678|-14674|-14670|-14668|-14663|-14654|-14645" . "|-14630|-14594|-14429|-14407|-14399|-14384|-14379|-14368|-14355|-14353|-14345|-14170|-14159|-14151|-14149" . "|-14145|-14140|-14137|-14135|-14125|-14123|-14122|-14112|-14109|-14099|-14097|-14094|-14092|-14090|-14087" . "|-14083|-13917|-13914|-13910|-13907|-13906|-13905|-13896|-13894|-13878|-13870|-13859|-13847|-13831|-13658" . "|-13611|-13601|-13406|-13404|-13400|-13398|-13395|-13391|-13387|-13383|-13367|-13359|-13356|-13343|-13340" . "|-13329|-13326|-13318|-13147|-13138|-13120|-13107|-13096|-13095|-13091|-13076|-13068|-13063|-13060|-12888" . "|-12875|-12871|-12860|-12858|-12852|-12849|-12838|-12831|-12829|-12812|-12802|-12607|-12597|-12594|-12585" . "|-12556|-12359|-12346|-12320|-12300|-12120|-12099|-12089|-12074|-12067|-12058|-12039|-11867|-11861|-11847" . "|-11831|-11798|-11781|-11604|-11589|-11536|-11358|-11340|-11339|-11324|-11303|-11097|-11077|-11067|-11055" . "|-11052|-11045|-11041|-11038|-11024|-11020|-11019|-11018|-11014|-10838|-10832|-10815|-10800|-10790|-10780" . "|-10764|-10587|-10544|-10533|-10519|-10331|-10329|-10328|-10322|-10315|-10309|-10307|-10296|-10281|-10274" . "|-10270|-10262|-10260|-10256|-10254"; $_TDataKey = explode('|', $_DataKey); $_TDataValue = explode('|', $_DataValue); $_Data = array_combine($_TDataKey, $_TDataValue); arsort($_Data); reset($_Data); $_String = auto_charset($_String, 'utf-8', 'gbk'); $_Res = ''; for ($i = 0; $i < strlen($_String); $i++) { $_P = ord(substr($_String, $i, 1)); if ($_P > 160) { $_Q = ord(substr($_String, ++$i, 1)); $_P = $_P * 256 + $_Q - 65536; } $_Res .= _Pinyin($_P, $_Data); } return preg_replace("/[^a-z0-9]*/", '', $_Res); } function auto_charset($fContents, $from = 'gbk', $to = 'utf-8') { $from = strtoupper($from) == 'UTF8' ? 'utf-8' : $from; $to = strtoupper($to) == 'UTF8' ? 'utf-8' : $to; if (strtoupper($from) === strtoupper($to) || empty($fContents) || (is_scalar($fContents) && !is_string($fContents))) { return $fContents; } if (is_string($fContents)) { if (function_exists('mb_convert_encoding')) { return mb_convert_encoding($fContents, $to, $from); } elseif (function_exists('iconv')) { return iconv($from, $to, $fContents); } else { return $fContents; } } elseif (is_array($fContents)) { foreach ($fContents as $key => $val) { $_key = auto_charset($key, $from, $to); $fContents[$_key] = auto_charset($val, $from, $to); if ($key != $_key) unset($fContents[$key]); } return $fContents; } else { return $fContents; } } function _Pinyin($_Num, $_Data) { if ($_Num > 0 && $_Num < 160) return chr($_Num); elseif ($_Num < -20319 || $_Num > -10247) return ''; else { foreach ($_Data as $k => $v) { if ($v <= $_Num) break; } return $k; } } function return_url($code) { $config = APP_LANG ? F('Config_' . LANG_NAME) : F('Config'); return $config['site_url'] . '/index.php?g=User&m=Pay&a=respond&code=' . $code; } function order_pay_status($sn, $value) { $cart['status'] = 1; $cart['pay_status'] = $value; if ($value == 2) $cart['pay_time'] = time(); $r = M('Order')->where("sn='{$sn}'")->save($cart); return $r; } function addslashes_array($array) { if (get_magic_quotes_gpc()) return $array; if (!is_array($array)) return addslashes($array); foreach ($array as $k => $val) $array[$k] = addslashes_array($val); return $array; } function stripslashes_array($array) { if (!is_array($array)) return stripslashes($array); foreach ($array as $k => $val) $array[$k] = stripslashes_array($val); return $array; } function htmlspecialchars_array($array) { if (!is_array($array)) return htmlspecialchars(strip_tags($array), ENT_QUOTES); foreach ($array as $k => $val) $array[$k] = htmlspecialchars_array($val); return $array; } function safe_replace($string) { $string = trim($string); $string = str_replace(array('\\', ';', '\'', '%2527', '%27', '%20', '&', '"', '<', '>'), array('', '', '', '', '', '', '&', '"', '<', '>'), $string); $string = nl2br($string); return $string; } function get_safe_replace($array) { if (!is_array($array)) return safe_replace(strip_tags($array)); foreach ($array as $k => $val) $array[$k] = get_safe_replace($val); return $array; } function match($char) { preg_match_all('/[\x{4e00}-\x{9fa5}a-zA-Z0-9]/u' , $char, $result); return implode('', $result[0]); } function sql_split($sql, $tablepre) { if ($tablepre != "yourphp_") $sql = str_replace("yourphp_", $tablepre, $sql); if ($r_tablepre != $s_tablepre) $sql = str_replace($s_tablepre, $r_tablepre, $sql); $sql = str_replace("\r", "\n", $sql); $ret = array(); $num = 0; $queriesarray = explode(";\n", trim($sql)); unset($sql); foreach ($queriesarray as $query) { $ret[$num] = ''; $queries = explode("\n", trim($query)); $queries = array_filter($queries); foreach ($queries as $query) { $str1 = substr($query, 0, 1); if ($str1 != '#' && $str1 != '-') $ret[$num] .= $query; } $num++; } return $ret; } function hasCatalogField($moduleid) { $fields = F($moduleid . '_Field'); foreach ($fields as $key => $res) { if ($res['type'] == 'catalog') { return $res['field']; } } return false; } function is_mobile($agent = "") { if (!$agent) $agent = strtolower($_SERVER['HTTP_USER_AGENT']); $res = 0; $res = (strpos($agent, 'iphone')) ? 1 : $res; $res = (strpos($agent, 'android')) ? 1 : $res; $res = (strpos($agent, 'ipad')) ? 2 : $res; if (!$res) { $res = (strpos($agent, 'mobile')) ? 1 : $res; } return $res; } function pics_to_arr($str) { $arr = explode(':::', $str); foreach ($arr as $k => $v) { $res[] = explode('|', $v); } return $res; } function unicode_decode($string) { preg_match_all('/u{1}[a-t|v-z|A-T|V-Z|\d]{4}/', $string, $match); $buff = $string; $match = array_unique($match); foreach ($match[0] as $v) { $buff = str_replace($v, json_decode('["\\' . $v . '"]')[0], $buff); } return $buff; } function request_uri() { if (isset($_SERVER['REQUEST_URI'])) { $uri = $_SERVER['REQUEST_URI']; } else { if (isset($_SERVER['argv'])) { $uri = $_SERVER['PHP_SELF'] . '?' . $_SERVER['argv'][0]; } else { $uri = $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING']; } } return $uri; } function ncReplaceText($message, $param) { if (!is_array($param)) return false; foreach ($param as $k => $v) { $message = str_replace('{$' . $k . '}', $v, $message); } return $message; } function sub_str($str, $length = 0, $append = true) { $str = trim($str); $strlength = strlen($str); if ($length == 0 || $length >= $strlength) { return $str; } elseif ($length < 0) { $length = $strlength + $length; if ($length < 0) { $length = $strlength; } } if (function_exists('mb_substr')) { $newstr = mb_substr($str, 0, $length, EC_CHARSET); } elseif (function_exists('iconv_substr')) { $newstr = iconv_substr($str, 0, $length, EC_CHARSET); } else { $newstr = substr($str, 0, $length); } if ($append && $str != $newstr) { $newstr .= '...'; } return $newstr; } function subtext($text, $length) { if(mb_strlen($text, 'utf8') > $length) { return mb_substr($text, 0, $length, 'utf8').'...'; } else { return $text; } } function check_Mobile($mobile) { if (!is_numeric($mobile)) { return false; } return preg_match('#^1[3,4,5,7,8,9]{1}[\d]{9}$#', $mobile) ? true : false; } function check_Email($str) { if (!$str) { return false; } return preg_match('#[a-z0-9&\-_.]+@[\w\-_]+([\w\-.]+)?\.[\w\-]+#is', $str) ? true : false; } function verify_groupid($type) { $html = ''; switch($type) { case 9: $html .= 'v普'; break; case 10: $html .= 'v高'; break; case 11: $html .= 'v钻'; break; } return $html; } function verify_special_groupid($type) { $is_special_group = 0; switch($type) { case 12: $is_special_group = 1; break; } return $is_special_group; } function change_groupid() { $now = time(); $where = []; $where['status'] = 1; $where['expire_time'] = array('lt',$now); $user_level = M('User_level')->field('userid')->where($where)->select(); if($user_level) { $data['groupid'] = 6; foreach ($user_level as $val) { $list[] = $val['userid']; M('User')->where("id=".$val['userid'])->save($data); } $where = []; $where = array('id' => array('in', $list)); $school_list = M('User')->field('schoolid')->where($where)->select(); foreach ($school_list as $v){ $school = M('School'); $school->where("id=".$v['schoolid'])->save($data); $kecheng = M('Kecheng'); $kecheng->where("school_id=".$v['schoolid'])->save($data); } $where = []; $where['status'] = 1; $where['expire_time'] = array('lt',$now); $data = []; $data['status'] = 0; M('User_level')->where($where)->save($data); } } function getReferer(){ return str_replace(array('\'','"', '<', '>'), '', $_SERVER['HTTP_REFERER']); } function getNchash($act = '', $op = ''){ $act = $act ? $act : $_GET['model']; $op = $op ? $op : $_GET['fun']; if (C('captcha_status_login')){ return substr(md5(SHOP_SITE_URL.$act.$op),0,8); } else { return ''; } } function encrypt($txt, $key = ''){ if (empty($txt)) return $txt; if (empty($key)) $key = md5(MD5_KEY); $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_."; $ikey ="-x6g6ZWm2G9g_vr0Bo.pOq3kRIxsZ6rm"; $nh1 = rand(0,64); $nh2 = rand(0,64); $nh3 = rand(0,64); $ch1 = $chars[$nh1]; $ch2 = $chars[$nh2]; $ch3 = $chars[$nh3]; $nhnum = $nh1 + $nh2 + $nh3; $knum = 0;$i = 0; while(isset($key[$i])) $knum +=ord($key[$i++]); $mdKey = substr(md5(md5(md5($key.$ch1).$ch2.$ikey).$ch3),$nhnum%8,$knum%8 + 16); $txt = base64_encode(time().'_'.$txt); $txt = str_replace(array('+','/','='),array('-','_','.'),$txt); $tmp = ''; $j=0;$k = 0; $tlen = strlen($txt); $klen = strlen($mdKey); for ($i=0; $i<$tlen; $i++) { $k = $k == $klen ? 0 : $k; $j = ($nhnum+strpos($chars,$txt[$i])+ord($mdKey[$k++]))%64; $tmp .= $chars[$j]; } $tmplen = strlen($tmp); $tmp = substr_replace($tmp,$ch3,$nh2 % ++$tmplen,0); $tmp = substr_replace($tmp,$ch2,$nh1 % ++$tmplen,0); $tmp = substr_replace($tmp,$ch1,$knum % ++$tmplen,0); return $tmp; } function decrypt($txt, $key = '', $ttl = 0){ if (empty($txt)) return $txt; if (empty($key)) $key = md5(MD5_KEY); $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_."; $ikey ="-x6g6ZWm2G9g_vr0Bo.pOq3kRIxsZ6rm"; $knum = 0;$i = 0; $tlen = @strlen($txt); while(isset($key[$i])) $knum +=ord($key[$i++]); $ch1 = @$txt[$knum % $tlen]; $nh1 = strpos($chars,$ch1); $txt = @substr_replace($txt,'',$knum % $tlen--,1); $ch2 = @$txt[$nh1 % $tlen]; $nh2 = @strpos($chars,$ch2); $txt = @substr_replace($txt,'',$nh1 % $tlen--,1); $ch3 = @$txt[$nh2 % $tlen]; $nh3 = @strpos($chars,$ch3); $txt = @substr_replace($txt,'',$nh2 % $tlen--,1); $nhnum = $nh1 + $nh2 + $nh3; $mdKey = substr(md5(md5(md5($key.$ch1).$ch2.$ikey).$ch3),$nhnum % 8,$knum % 8 + 16); $tmp = ''; $j=0; $k = 0; $tlen = @strlen($txt); $klen = @strlen($mdKey); for ($i=0; $i<$tlen; $i++) { $k = $k == $klen ? 0 : $k; $j = strpos($chars,$txt[$i])-$nhnum - ord($mdKey[$k++]); while ($j<0) $j+=64; $tmp .= $chars[$j]; } $tmp = str_replace(array('-','_','.'),array('+','/','='),$tmp); $tmp = trim(base64_decode($tmp)); if (preg_match("/\d{10}_/s",substr($tmp,0,11))){ if ($ttl > 0 && (time() - substr($tmp,0,11) > $ttl)){ $tmp = null; }else{ $tmp = substr($tmp,11); } } return $tmp; } function chksubmit($check_token = false, $check_captcha = false, $return_type = 'alert'){ $submit = isset($_POST['form_submit']) ? $_POST['form_submit'] : $_GET['form_submit']; import ( '@.ORG.Security' ); if ($submit != 'ok') return false; if ($check_token && !Security::checkToken()){ if ($return_type == 'alert'){ show_message('Token error!'); }else{ return -11; } } if ($check_captcha){ if (!checkSeccode($_POST['nchash'],$_POST['captcha'])){ setNcCookie('seccode'.$_POST['nchash'],'',-3600); if ($return_type == 'alert'){ show_message('验证码错误!'); }else{ return -12; } } setNcCookie('seccode'.$_POST['nchash'],'',-3600); } return true; } function filterArr($array) { if (!is_array($array)) return filterRequest($array); foreach ($array as $k => $val) $array[$k] = filterArr($val); return $array; } function filterRequest($str) { if (empty($str)) return false; $str = htmlspecialchars($str); $str = str_replace( 'ASCII', "", $str); $str = str_replace( 'ASCII 0x0d', "", $str); $str = str_replace( 'ASCII 0x0a', "", $str); $str = str_replace( 'eval', "", $str); $str = str_replace( 'open', "", $str); $str = str_replace( 'sysopen', "", $str); $str = str_replace( 'system', "", $str); $str = str_replace( 'ASCII 0x08', "", $str); $str = str_replace(">", "", $str); $str = str_replace("<", "", $str); $str = str_replace("", "", $str); $str = str_replace("", "", $str); $str = str_replace("select","",$str); $str = str_replace("join","",$str); $str = str_replace("union","",$str); $str = str_replace("where","",$str); $str = str_replace("insert","",$str); $str = str_replace("delete","",$str); $str = str_replace("update","",$str); $str = str_replace("like","",$str); $str = str_replace("drop","",$str); $str = str_replace("DROP","",$str); $str = str_replace("create","",$str); $str = str_replace("modify","",$str); $str = str_replace("rename","",$str); $str = str_replace("alter","",$str); $str = str_replace("SELECT","",$str); $str = str_replace("JOIN","",$str); $str = str_replace("UOIN","",$str); $str = str_replace("WHERE","",$str); $str = str_replace("INSERT","",$str); $str = str_replace("DELETE","",$str); $str = str_replace("UPDATE","",$str); $str = str_replace("LIKE","",$str); $str = str_replace("DROP","",$str); $str = str_replace("CREATE","",$str); $str = str_replace("MODIFY","",$str); $str = str_replace("RENAME","",$str); $str = str_replace("ALTER","",$str); $str = str_replace("CAS","",$str); $str = str_replace("