为什么80%的码农都做不了架构师?>>>   

<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
// +----------------------------------------------------------------------+
// | PHP version 5                                                        |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group                                |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license,       |
// | that is bundled with this package in the file LICENSE, and is        |
// | available through the world-wide-web at the following url:           |
// | http://www.php.net/license/3_0.txt.                                  |
// | If you did not receive a copy of the PHP license and are unable to   |
// | obtain it through the world-wide-web, please send a note to          |
// | license@php.net so we can mail you a copy immediately.               |
// +----------------------------------------------------------------------+
// | Authors: Original Author <author@example.com>                        |
// |          Your Name <you@example.com>                                 |
// +----------------------------------------------------------------------+
//
// $Id:$$GLOBALS['_beginTime'] = microtime(TRUE);
defined('APP_NAME') or define('APP_NAME', 'App');
defined('APP_PATH') or define('APP_PATH', './App/');
defined('MEMORY_LIMIT_ON') or define('MEMORY_LIMIT_ON', true);
defined('THINK_PATH') or define('THINK_PATH', 'E:\\www\\haodou\\ithink\\ThinkPHP/');
defined('APP_DEBUG') or define('APP_DEBUG', false);
defined('RUNTIME_PATH') or define('RUNTIME_PATH', './App/Runtime/');
defined('RUNTIME_FILE') or define('RUNTIME_FILE', './App/Runtime/~runtime.php');
defined('THINK_VERSION') or define('THINK_VERSION', '3.1.3');
defined('MAGIC_QUOTES_GPC') or define('MAGIC_QUOTES_GPC', false);
defined('IS_CGI') or define('IS_CGI', 0);
defined('IS_WIN') or define('IS_WIN', 1);
defined('IS_CLI') or define('IS_CLI', 0);
defined('_PHP_FILE_') or define('_PHP_FILE_', '/index.php');
defined('__ROOT__') or define('__ROOT__', '');
defined('URL_COMMON') or define('URL_COMMON', 0);
defined('URL_PATHINFO') or define('URL_PATHINFO', 1);
defined('URL_REWRITE') or define('URL_REWRITE', 2);
defined('URL_COMPAT') or define('URL_COMPAT', 3);
defined('CORE_PATH') or define('CORE_PATH', 'E:\\www\\haodou\\ithink\\ThinkPHP/Lib/');
defined('EXTEND_PATH') or define('EXTEND_PATH', 'E:\\www\\haodou\\ithink\\ThinkPHP/Extend/');
defined('MODE_PATH') or define('MODE_PATH', 'E:\\www\\haodou\\ithink\\ThinkPHP/Extend/Mode/');
defined('ENGINE_PATH') or define('ENGINE_PATH', 'E:\\www\\haodou\\ithink\\ThinkPHP/Extend/Engine/');
defined('VENDOR_PATH') or define('VENDOR_PATH', 'E:\\www\\haodou\\ithink\\ThinkPHP/Extend/Vendor/');
defined('LIBRARY_PATH') or define('LIBRARY_PATH', 'E:\\www\\haodou\\ithink\\ThinkPHP/Extend/Library/');
defined('COMMON_PATH') or define('COMMON_PATH', './App/Common/');
defined('LIB_PATH') or define('LIB_PATH', './App/Lib/');
defined('CONF_PATH') or define('CONF_PATH', './App/Conf/');
defined('LANG_PATH') or define('LANG_PATH', './App/Lang/');
defined('TMPL_PATH') or define('TMPL_PATH', './App/Tpl/');
defined('HTML_PATH') or define('HTML_PATH', './App/Html/');
defined('LOG_PATH') or define('LOG_PATH', './App/Runtime/Logs/');
defined('TEMP_PATH') or define('TEMP_PATH', './App/Runtime/Temp/');
defined('DATA_PATH') or define('DATA_PATH', './App/Runtime/Data/');
defined('CACHE_PATH') or define('CACHE_PATH', './App/Runtime/Cache/');
set_include_path(get_include_path() . PATH_SEPARATOR . VENDOR_PATH);
function T($template = '', $layer = '') {if (is_file($template)) {return $template;}if (false === strpos($template, '://')) {$template = APP_NAME . '://' . str_replace(':', '/', $template);}$info = parse_url($template);$file = $info['host'] . (isset($info['path']) ? $info['path'] : '');$group = isset($info['user']) ? $info['user'] . '/' : (defined('GROUP_NAME') ? GROUP_NAME . '/' : '');$app = $info['scheme'];$layer = $layer ? $layer : C('DEFAULT_V_LAYER');if (($list = C('EXTEND_GROUP_LIST')) && isset($list[$app])) {$baseUrl = $list[$app] . '/' . $group . $layer . '/';} elseif (1 == C('APP_GROUP_MODE')) {$baseUrl = dirname(BASE_LIB_PATH) . '/' . $group . $layer . '/';} else {$baseUrl = TMPL_PATH . $group;}if ('' == $file) {$file = MODULE_NAME . C('TMPL_FILE_DEPR') . ACTION_NAME;} elseif (false === strpos($file, '/')) {$file = MODULE_NAME . C('TMPL_FILE_DEPR') . $file;}return $baseUrl . $file . C('TMPL_TEMPLATE_SUFFIX');
}
function I($name, $default = '', $filter = null) {if (strpos($name, '.')) {list($method, $name) = explode('.', $name, 2);} else {$method = 'param';}switch (strtolower($method)) {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') && isset($_GET[C('VAR_URL_PARAMS') ])) {$input = array_merge($input, $_GET[C('VAR_URL_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:return NULL;}if (C('VAR_FILTERS')) {$_filters = explode(',', C('VAR_FILTERS'));foreach ($_filters as $_filter) {array_walk_recursive($input, $_filter);}}if (empty($name)) {$data = $input;$filters = isset($filter) ? $filter : C('DEFAULT_FILTER');if ($filters) {$filters = explode(',', $filters);foreach ($filters as $filter) {$data = array_map($filter, $data);}}} elseif (isset($input[$name])) {$data = $input[$name];$filters = isset($filter) ? $filter : 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 = filter_var($data, is_int($filter) ? $filter : filter_id($filter));if (false === $data) {return isset($default) ? $default : NULL;}}}}} else {$data = isset($default) ? $default : NULL;}return $data;
}
function G($start, $end = '', $dec = 4) {static $_info = array();static $_mem = array();if (is_float($end)) {$_info[$start] = $end;} elseif (!empty($end)) {if (!isset($_info[$end])) $_info[$end] = microtime(TRUE);if (MEMORY_LIMIT_ON && $dec == 'm') {if (!isset($_mem[$end])) $_mem[$end] = memory_get_usage();return number_format(($_mem[$end] - $_mem[$start]) / 1024);} else {return number_format(($_info[$end] - $_info[$start]) , $dec);}} else {$_info[$start] = microtime(TRUE);if (MEMORY_LIMIT_ON) $_mem[$start] = memory_get_usage();}
}
function N($key, $step = 0, $save = false) {static $_num = array();if (!isset($_num[$key])) {$_num[$key] = (false !== $save) ? S('N_' . $key) : 0;}if (empty($step)) return $_num[$key];else $_num[$key] = $_num[$key] + (int)$step;if (false !== $save) {S('N_' . $key, $_num[$key], $save);}
}
function parse_name($name, $type = 0) {if ($type) {return ucfirst(preg_replace("/_([a-zA-Z])/e", "strtoupper('\\1')", $name));} else {return strtolower(trim(preg_replace("/[A-Z]/", "_\\0", $name) , "_"));}
}
function require_cache($filename) {static $_importFiles = array();if (!isset($_importFiles[$filename])) {if (file_exists_case($filename)) {require $filename;$_importFiles[$filename] = true;} else {$_importFiles[$filename] = false;}}return $_importFiles[$filename];
}
function require_array($array, $return = false) {foreach ($array as $file) {if (require_cache($file) && $return) return true;}if ($return) return false;
}
function file_exists_case($filename) {if (is_file($filename)) {if (IS_WIN && C('APP_FILE_CASE')) {if (basename(realpath($filename)) != basename($filename)) return false;}return true;}return false;
}
function import($class, $baseUrl = '', $ext = '.class.php') {static $_file = array();$class = str_replace(array('.','#') , array('/','.') , $class);if ('' === $baseUrl && false === strpos($class, '/')) {return alias_import($class);}if (isset($_file[$class . $baseUrl])) return true;else $_file[$class . $baseUrl] = true;$class_strut = explode('/', $class);if (empty($baseUrl)) {$libPath = defined('BASE_LIB_PATH') ? BASE_LIB_PATH : LIB_PATH;if ('@' == $class_strut[0] || APP_NAME == $class_strut[0]) {$baseUrl = dirname($libPath);$class = substr_replace($class, basename($libPath) . '/', 0, strlen($class_strut[0]) + 1);} elseif ('think' == strtolower($class_strut[0])) {$baseUrl = CORE_PATH;$class = substr($class, 6);} elseif (in_array(strtolower($class_strut[0]) , array('org','com'))) {$baseUrl = LIBRARY_PATH;} else {$class = substr_replace($class, '', 0, strlen($class_strut[0]) + 1);$baseUrl = APP_PATH . '../' . $class_strut[0] . '/' . basename($libPath) . '/';}}if (substr($baseUrl, -1) != '/') $baseUrl.= '/';$classfile = $baseUrl . $class . $ext;if (!class_exists(basename($class) , false)) {return require_cache($classfile);}
}
function load($name, $baseUrl = '', $ext = '.php') {$name = str_replace(array('.','#') , array('/','.') , $name);if (empty($baseUrl)) {if (0 === strpos($name, '@/')) {$baseUrl = COMMON_PATH;$name = substr($name, 2);} else {$baseUrl = EXTEND_PATH . 'Function/';}}if (substr($baseUrl, -1) != '/') $baseUrl.= '/';require_cache($baseUrl . $name . $ext);
}
function vendor($class, $baseUrl = '', $ext = '.php') {if (empty($baseUrl)) $baseUrl = VENDOR_PATH;return import($class, $baseUrl, $ext);
}
function alias_import($alias, $classfile = '') {static $_alias = array();if (is_string($alias)) {if (isset($_alias[$alias])) {return require_cache($_alias[$alias]);} elseif ('' !== $classfile) {$_alias[$alias] = $classfile;return;}} elseif (is_array($alias)) {$_alias = array_merge($_alias, $alias);return;}return false;
}
function D($name = '', $layer = '') {if (empty($name)) return new Model;static $_model = array();$layer = $layer ? $layer : C('DEFAULT_M_LAYER');if (strpos($name, '://')) {list($app) = explode('://', $name);$name = str_replace('://', '/' . $layer . '/', $name);} else {$app = C('DEFAULT_APP');$name = $app . '/' . $layer . '/' . $name;}if (isset($_model[$name])) return $_model[$name];$path = explode('/', $name);if ($list = C('EXTEND_GROUP_LIST') && isset($list[$app])) {$baseUrl = $list[$app];import($path[2] . '/' . $path[1] . '/' . $path[3] . $layer, $baseUrl);} elseif (count($path) > 3 && 1 == C('APP_GROUP_MODE')) {$baseUrl = $path[0] == '@' ? dirname(BASE_LIB_PATH) : APP_PATH . '../' . $path[0] . '/' . C('APP_GROUP_PATH') . '/';import($path[2] . '/' . $path[1] . '/' . $path[3] . $layer, $baseUrl);} else {import($name . $layer);}$class = basename($name . $layer);if (class_exists($class)) {$model = new $class(basename($name));} else {$model = new Model(basename($name));}$_model[$name] = $model;return $model;
}
function M($name = '', $tablePrefix = '', $connection = '') {static $_model = array();if (strpos($name, ':')) {list($class, $name) = explode(':', $name);} else {$class = 'Model';}$guid = $tablePrefix . $name . '_' . $class;if (!isset($_model[$guid])) $_model[$guid] = new $class($name, $tablePrefix, $connection);return $_model[$guid];
}
function A($name, $layer = '', $common = false) {static $_action = array();$layer = $layer ? $layer : C('DEFAULT_C_LAYER');if (strpos($name, '://')) {list($app) = explode('://', $name);$name = str_replace('://', '/' . $layer . '/', $name);} else {$app = '@';$name = '@/' . $layer . '/' . $name;}if (isset($_action[$name])) return $_action[$name];$path = explode('/', $name);if ($list = C('EXTEND_GROUP_LIST') && isset($list[$app])) {$baseUrl = $list[$app];import($path[2] . '/' . $path[1] . '/' . $path[3] . $layer, $baseUrl);} elseif (count($path) > 3 && 1 == C('APP_GROUP_MODE')) {$baseUrl = $path[0] == '@' ? dirname(BASE_LIB_PATH) : APP_PATH . '../' . $path[0] . '/' . C('APP_GROUP_PATH') . '/';import($path[2] . '/' . $path[1] . '/' . $path[3] . $layer, $baseUrl);} elseif ($common) {import(str_replace('@/', '', $name) . $layer, LIB_PATH);} else {import($name . $layer);}$class = basename($name . $layer);if (class_exists($class, false)) {$action = new $class();$_action[$name] = $action;return $action;} else {return false;}
}
function R($url, $vars = array() , $layer = '') {$info = pathinfo($url);$action = $info['basename'];$module = $info['dirname'];$class = A($module, $layer);if ($class) {if (is_string($vars)) {parse_str($vars, $vars);}return call_user_func_array(array(&$class,$action . C('ACTION_SUFFIX')) , $vars);} else {return false;}
}
function L($name = null, $value = null) {static $_lang = array();if (empty($name)) return $_lang;if (is_string($name)) {$name = strtoupper($name);if (is_null($value)) return isset($_lang[$name]) ? $_lang[$name] : $name;$_lang[$name] = $value;return;}if (is_array($name)) $_lang = array_merge($_lang, array_change_key_case($name, CASE_UPPER));return;
}
function C($name = null, $value = null) {static $_config = array();if (empty($name)) {if (!empty($value) && $array = S('c_' . $value)) {$_config = array_merge($_config, array_change_key_case($array));}return $_config;}if (is_string($name)) {if (!strpos($name, '.')) {$name = strtolower($name);if (is_null($value)) return isset($_config[$name]) ? $_config[$name] : null;$_config[$name] = $value;return;}$name = explode('.', $name);$name[0] = strtolower($name[0]);if (is_null($value)) return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : null;$_config[$name[0]][$name[1]] = $value;return;}if (is_array($name)) {$_config = array_merge($_config, array_change_key_case($name));if (!empty($value)) {S('c_' . $value, $_config);}return;}return null;
}
function tag($tag, &$params = NULL) {$extends = C('extends.' . $tag);$tags = C('tags.' . $tag);if (!empty($tags)) {if (empty($tags['_overlay']) && !empty($extends)) {$tags = array_unique(array_merge($extends, $tags));} elseif (isset($tags['_overlay'])) {unset($tags['_overlay']);}} elseif (!empty($extends)) {$tags = $extends;}if ($tags) {if (APP_DEBUG) {G($tag . 'Start');trace('[ ' . $tag . ' ] --START--', '', 'INFO');}foreach ($tags as $key => $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 B($name, &$params = NULL) {if (strpos($name, '/')) {list($name, $method) = explode('/', $name);} else {$method = 'run';}$class = $name . 'Behavior';if (APP_DEBUG) {G('behaviorStart');}$behavior = new $class();$behavior->$method($params);if (APP_DEBUG) {G('behaviorEnd');trace($name . ' Behavior ::' . $method . ' [ RunTime:' . G('behaviorStart', 'behaviorEnd', 6) . 's ]', '', 'INFO');}
}
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.= "<<<THINK\n";break;case T_END_HEREDOC:$stripStr.= "THINK;\n";for ($k = $i + 1; $k < $j; $k++) {if (is_string($tokens[$k]) && $tokens[$k] == ';') {$i = $k;break;} else if ($tokens[$k][0] == T_CLOSE_TAG) {break;}}break;default:$last_space = false;$stripStr.= $tokens[$i][1];}}}return $stripStr;
}
function trace($value = '[think]', $label = '', $level = 'DEBUG', $record = false) {static $_trace = array();if ('[think]' === $value) {return $_trace;} else {$info = ($label ? $label . ':' : '') . print_r($value, true);if ('ERR' == $level && C('TRACE_EXCEPTION')) {throw_exception($info);}$level = strtoupper($level);if (!isset($_trace[$level])) {$_trace[$level] = array();}$_trace[$level][] = $info;if ((defined('IS_AJAX') && IS_AJAX) || !C('SHOW_PAGE_TRACE') || $record) {Log::record($info, $level, $record);}}
}
class Think {private static $_instance = array();static public function start() {register_shutdown_function(array('Think','fatalError'));set_error_handler(array('Think','appError'));set_exception_handler(array('Think','appException'));spl_autoload_register(array('Think','autoload'));App::run();return;}public static function autoload($class) {if (alias_import($class)) return;$libPath = defined('BASE_LIB_PATH') ? BASE_LIB_PATH : LIB_PATH;$group = defined('GROUP_NAME') && C('APP_GROUP_MODE') == 0 ? GROUP_NAME . '/' : '';$file = $class . '.class.php';if (substr($class, -8) == 'Behavior') {if (require_array(array(CORE_PATH . 'Behavior/' . $file,EXTEND_PATH . 'Behavior/' . $file,LIB_PATH . 'Behavior/' . $file,$libPath . 'Behavior/' . $file) , true) || (defined('MODE_NAME') && require_cache(MODE_PATH . ucwords(MODE_NAME) . '/Behavior/' . $file))) {return;}} elseif (substr($class, -5) == 'Model') {if (require_array(array(LIB_PATH . 'Model/' . $group . $file,$libPath . 'Model/' . $file,EXTEND_PATH . 'Model/' . $file) , true)) {return;}} elseif (substr($class, -6) == 'Action') {if (require_array(array(LIB_PATH . 'Action/' . $group . $file,$libPath . 'Action/' . $file,EXTEND_PATH . 'Action/' . $file) , true)) {return;}} elseif (substr($class, 0, 5) == 'Cache') {if (require_array(array(EXTEND_PATH . 'Driver/Cache/' . $file,CORE_PATH . 'Driver/Cache/' . $file) , true)) {return;}} elseif (substr($class, 0, 2) == 'Db') {if (require_array(array(EXTEND_PATH . 'Driver/Db/' . $file,CORE_PATH . 'Driver/Db/' . $file) , true)) {return;}} elseif (substr($class, 0, 8) == 'Template') {if (require_array(array(EXTEND_PATH . 'Driver/Template/' . $file,CORE_PATH . 'Driver/Template/' . $file) , true)) {return;}} elseif (substr($class, 0, 6) == 'TagLib') {if (require_array(array(EXTEND_PATH . 'Driver/TagLib/' . $file,CORE_PATH . 'Driver/TagLib/' . $file) , true)) {return;}}$paths = explode(',', C('APP_AUTOLOAD_PATH'));foreach ($paths as $path) {if (import($path . '.' . $class)) return;}}static public function instance($class, $method = '') {$identify = $class . $method;if (!isset(self::$_instance[$identify])) {if (class_exists($class)) {$o = new $class();if (!empty($method) && method_exists($o, $method)) self::$_instance[$identify] = call_user_func_array(array(&$o,$method));else self::$_instance[$identify] = $o;} else halt(L('_CLASS_NOT_EXIST_') . ':' . $class);}return self::$_instance[$identify];}static public function appException($e) {$error = array();$error['message'] = $e->getMessage();$trace = $e->getTrace();if ('throw_exception' == $trace[0]['function']) {$error['file'] = $trace[0]['file'];$error['line'] = $trace[0]['line'];} else {$error['file'] = $e->getFile();$error['line'] = $e->getLine();}Log::record($error['message'], Log::ERR);halt($error);}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 (C('LOG_RECORD')) Log::save();if ($e = error_get_last()) {switch ($e['type']) {case E_ERROR:case E_PARSE:case E_CORE_ERROR:case E_COMPILE_ERROR:case E_USER_ERROR:ob_end_clean();function_exists('halt') ? halt($e) : exit('ERROR:' . $e['message'] . ' in <b>' . $e['file'] . '</b> on line <b>' . $e['line'] . '</b>');break;}}}}class ThinkException extends Exception {}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);}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']) && self::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);}}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;}}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->checkContentCache($_data['content'], $_data['prefix'])) || $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 (class_exists($class)) {$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;}protected function checkContentCache($tmplContent, $prefix = '') {if (is_file(C('CACHE_PATH') . $prefix . md5($tmplContent) . C('TMPL_CACHFILE_SUFFIX'))) {return true;} else {return false;}}}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',);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;}}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 = '<input type="hidden" name="' . $tokenName . '" value="' . $tokenKey . '_' . $tokenValue . '" />';return $token;}}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);}}}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;}}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() ,'吞吐率' => number_format(1 / G('beginTime', 'viewEndTime') , 2) . 'req/s','内存开销' => 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:$name = strtoupper($name);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('<br/>', "\r\n", $content) , Log::FILE, LOG_PATH . date('y_m_d') . '_trace.log');}unset($files, $info, $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 )';}}alias_import(array('Model' => 'E:\\www\\haodou\\ithink\\ThinkPHP/Lib/Core/Model.class.php','Db' => 'E:\\www\\haodou\\ithink\\ThinkPHP/Lib/Core/Db.class.php','Log' => 'E:\\www\\haodou\\ithink\\ThinkPHP/Lib/Core/Log.class.php','ThinkTemplate' => 'E:\\www\\haodou\\ithink\\ThinkPHP/Lib/Template/ThinkTemplate.class.php','TagLib' => 'E:\\www\\haodou\\ithink\\ThinkPHP/Lib/Template/TagLib.class.php','Cache' => 'E:\\www\\haodou\\ithink\\ThinkPHP/Lib/Core/Cache.class.php','Widget' => 'E:\\www\\haodou\\ithink\\ThinkPHP/Lib/Core/Widget.class.php','TagLibCx' => 'E:\\www\\haodou\\ithink\\ThinkPHP/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['line'] = $trace[0]['line'];ob_start();debug_print_backtrace();$e['trace'] = ob_get_clean();} 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');}}include C('TMPL_EXCEPTION_FILE');exit;}function throw_exception($msg, $type = 'ThinkException', $code = 0) {if (class_exists($type, false)) throw new $type($msg, $code);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 = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>';} 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 = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>';}}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 U($url = '', $vars = '', $suffix = true, $redirect = false, $domain = false) {$info = parse_url($url);$url = !empty($info['path']) ? $info['path'] : ACTION_NAME;if (isset($info['fragment'])) {$anchor = $info['fragment'];if (false !== strpos($anchor, '?')) {list($anchor, $info['query']) = explode('?', $anchor, 2);}if (false !== strpos($anchor, '@')) {list($anchor, $host) = explode('@', $anchor, 2);}} elseif (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 ($maps = C('URL_ACTION_MAP')) {if (isset($maps[strtolower($var[C('VAR_MODULE') ]) ])) {$maps = $maps[strtolower($var[C('VAR_MODULE') ]) ];if ($action = array_search(strtolower($var[C('VAR_ACTION') ]) , $maps)) {$var[C('VAR_ACTION') ] = $action;}}}if ($maps = C('URL_MODULE_MAP')) {if ($module = array_search(strtolower($var[C('VAR_MODULE') ]) , $maps)) {$var[C('VAR_MODULE') ] = $module;}}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) {if ('' !== trim($val)) $url.= $depr . $var . $depr . urlencode($val);}}if ($suffix) {$suffix = $suffix === true ? C('URL_HTML_SUFFIX') : $suffix;if ($pos = strpos($suffix, '|')) {$suffix = substr($suffix, 0, $pos);}if ($suffix && '/' != substr($url, -1)) {$url.= '.' . ltrim($suffix, '.');}}}if (isset($anchor)) {$url.= '#' . $anchor;}if ($domain) {$url = (is_ssl() ? 'https://' : 'http://') . $domain . $url;}if ($redirect) redirect($url);else return $url;}function W($name, $data = array() , $return = false, $path = '') {$class = $name . 'Widget';$path = empty($path) ? BASE_LIB_PATH : $path;require_cache($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 filter($name, &$content) {$class = $name . 'Filter';require_cache(BASE_LIB_PATH . 'Filter/' . $class . '.class.php');$filter = new $class();$content = $filter->run($content);}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 = "<meta http-equiv='Refresh' content='{$time};URL={$url}'>";if ($time != 0) $str.= $msg;exit($str);}}function S($name, $value = '', $options = null) {static $cache = '';if (is_array($options) && empty($cache)) {$type = isset($options['type']) ? $options['type'] : '';$cache = Cache::getInstance($type, $options);} 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 {if (is_array($options)) {$expire = isset($options['expire']) ? $options['expire'] : NULL;} else {$expire = is_numeric($options) ? $options : NULL;}return $cache->set($name, $value, $expire);}}function cache($name, $value = '', $options = null) {return S($name, $value, $options);}function F($name, $value = '', $path = DATA_PATH) {static $_cache = array();$filename = $path . $name . '.php';if ('' !== $value) {if (is_null($value)) {return false !== strpos($name, '*') ? array_map("unlink", glob($filename)) : unlink($filename);} else {$dir = dirname($filename);if (!is_dir($dir)) mkdir($dir, 0755, true);$_cache[$name] = $value;return file_put_contents($filename, strip_whitespace("<?php\treturn " . var_export($value, true) . ";?>"));}}if (isset($_cache[$name])) return $_cache[$name];if (is_file($filename)) {$value = include $filename;$_cache[$name] = $value;} else {$value = false;}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, $root = 'think', $item = 'item', $attr = '', $id = 'id', $encoding = 'utf-8') {if (is_array($attr)) {$_attr = array();foreach ($attr as $key => $value) {$_attr[] = "{$key}=\"{$value}\"";}$attr = implode(' ', $_attr);}$attr = trim($attr);$attr = empty($attr) ? '' : " {$attr}";$xml = "<?xml version=\"1.0\" encoding=\"{$encoding}\"?>";$xml.= "<{$root}{$attr}>";$xml.= data_to_xml($data, $item, $id);$xml.= "</{$root}>";return $xml;}function data_to_xml($data, $item = 'item', $id = 'id') {$xml = $attr = '';foreach ($data as $key => $val) {if (is_numeric($key)) {$id && $attr = " {$id}=\"{$key}\"";$key = $item;}$xml.= "<{$key}{$attr}>";$xml.= (is_array($val) || is_object($val)) ? data_to_xml($val, $item, $id) : $val;$xml.= "</{$key}>";}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 (strpos($name, '.')) {list($name1, $name2) = explode('.', $name);return $prefix ? isset($_SESSION[$prefix][$name1][$name2]) : isset($_SESSION[$name1][$name2]);} else {return $prefix ? isset($_SESSION[$prefix][$name]) : isset($_SESSION[$name]);}} elseif (is_null($name)) {if ($prefix) {unset($_SESSION[$prefix]);} else {$_SESSION = array();}} elseif ($prefix) {if (strpos($name, '.')) {list($name1, $name2) = explode('.', $name);return isset($_SESSION[$prefix][$name1][$name2]) ? $_SESSION[$prefix][$name1][$name2] : null;} else {return isset($_SESSION[$prefix][$name]) ? $_SESSION[$prefix][$name] : null;}} else {if (strpos($name, '.')) {list($name1, $name2) = explode('.', $name);return isset($_SESSION[$name1][$name2]) ? $_SESSION[$name1][$name2] : 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 (!is_null($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) {if (isset($_COOKIE[$name])) {$value = $_COOKIE[$name];if (0 === strpos($value, 'think:')) {$value = substr($value, 6);return array_map('urldecode', json_decode(MAGIC_QUOTES_GPC ? stripslashes($value) : $value, true));} else {return $value;}} else {return null;}} else {if (is_null($value)) {setcookie($name, '', time() - 3600, $config['path'], $config['domain']);unset($_COOKIE[$name]);} else {if (is_array($value)) {$value = 'think:' . json_encode(array_map('urlencode', $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 = sprintf("%u", ip2long($ip));$ip = $long ? array($ip,$long) : array('0.0.0.0',0);return $ip[$type];}function send_http_status($code) {static $_status = array(100 => 'Continue',101 => 'Switching Protocols',200 => 'OK',201 => 'Created',202 => 'Accepted',203 => 'Non-Authoritative Information',204 => 'No Content',205 => 'Reset Content',206 => 'Partial Content',300 => 'Multiple Choices',301 => 'Moved Permanently',302 => 'Moved Temporarily ',303 => 'See Other',304 => 'Not Modified',305 => 'Use Proxy',307 => 'Temporary Redirect',400 => 'Bad Request',401 => 'Unauthorized',402 => 'Payment Required',403 => 'Forbidden',404 => 'Not Found',405 => 'Method Not Allowed',406 => 'Not Acceptable',407 => 'Proxy Authentication Required',408 => 'Request Timeout',409 => 'Conflict',410 => 'Gone',411 => 'Length Required',412 => 'Precondition Failed',413 => 'Request Entity Too Large',414 => 'Request-URI Too Long',415 => 'Unsupported Media Type',416 => 'Requested Range Not Satisfiable',417 => 'Expectation Failed',500 => 'Internal Server Error',501 => 'Not Implemented',502 => 'Bad Gateway',503 => 'Service Unavailable',504 => 'Gateway Timeout',505 => 'HTTP Version Not Supported',509 => 'Bandwidth Limit Exceeded');if (isset($_status[$code])) {header('HTTP/1.1 ' . $code . ' ' . $_status[$code]);header('Status:' . $code . ' ' . $_status[$code]);}}function filter_exp(&$value) {if (in_array(strtolower($value) , array('exp','or'))) {$value.= ' ';}}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 = C('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 = C('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 (isset($_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');if (isset($rules[$_SERVER['HTTP_HOST']])) {$rule = $rules[$_SERVER['HTTP_HOST']];} else {$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 (!isset($_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 (__EXT__) {if (C('URL_DENY_SUFFIX') && preg_match('/\.(' . trim(C('URL_DENY_SUFFIX') , '.') . ')$/i', $_SERVER['PATH_INFO'])) {send_http_status(404);exit;}if (C('URL_HTML_SUFFIX')) {$_SERVER['PATH_INFO'] = preg_replace('/\.(' . trim(C('URL_HTML_SUFFIX') , '.') . ')$/i', '', $_SERVER['PATH_INFO']);} else {$_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']);} else {define('__INFO__', '');}define('__SELF__', strip_tags($_SERVER['REQUEST_URI']));define('__APP__', strip_tags(PHP_FILE));if (C('APP_GROUP_LIST')) {define('GROUP_NAME', self::getGroup(C('VAR_GROUP')));define('__GROUP__', (!empty($domainGroup) || strtolower(GROUP_NAME) == strtolower(C('DEFAULT_GROUP'))) ? __APP__ : __APP__ . '/' . (C('URL_CASE_INSENSITIVE') ? strtolower(GROUP_NAME) : GROUP_NAME));}define('BASE_LIB_PATH', (defined('GROUP_NAME') && C('APP_GROUP_MODE') == 1) ? APP_PATH . C('APP_GROUP_PATH') . '/' . GROUP_NAME . '/' : LIB_PATH);if (defined('GROUP_NAME')) {C('CACHE_PATH', CACHE_PATH . GROUP_NAME . '/');if (1 == C('APP_GROUP_MODE')) {$config_path = BASE_LIB_PATH . 'Conf/';$common_path = BASE_LIB_PATH . 'Common/';} else {$config_path = CONF_PATH . GROUP_NAME . '/';$common_path = COMMON_PATH . GROUP_NAME . '/';}if (is_file($config_path . 'config.php')) C(include $config_path . 'config.php');if (is_file($config_path . 'alias.php')) alias_import(include $config_path . 'alias.php');if (is_file($config_path . 'tags.php')) C('tags', include $config_path . 'tags.php');if (is_file($common_path . 'function.php')) include $common_path . 'function.php';} else {C('CACHE_PATH', CACHE_PATH);}define('MODULE_NAME', self::getModule(C('VAR_MODULE')));define('ACTION_NAME', self::getAction(C('VAR_ACTION')));$moduleName = defined('MODULE_ALIAS') ? MODULE_ALIAS : MODULE_NAME;if (defined('GROUP_NAME')) {define('__URL__', !empty($domainModule) ? __GROUP__ . $depr : __GROUP__ . $depr . (C('URL_CASE_INSENSITIVE') ? strtolower($moduleName) : $moduleName));} else {define('__URL__', !empty($domainModule) ? __APP__ . '/' : __APP__ . '/' . (C('URL_CASE_INSENSITIVE') ? strtolower($moduleName) : $moduleName));}define('__ACTION__', __URL__ . $depr . (defined('ACTION_ALIAS') ? ACTION_ALIAS : 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 ($maps = C('URL_MODULE_MAP')) {if (isset($maps[strtolower($module) ])) {define('MODULE_ALIAS', strtolower($module));return $maps[MODULE_ALIAS];} elseif (array_search(strtolower($module) , $maps)) {return '';}}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]);if ($maps = C('URL_ACTION_MAP')) {if (isset($maps[strtolower(MODULE_NAME) ])) {$maps = $maps[strtolower(MODULE_NAME) ];if (isset($maps[strtolower($action) ])) {define('ACTION_ALIAS', strtolower($action));return $maps[ACTION_ALIAS];} elseif (array_search(strtolower($action) , $maps)) {return '';}}}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() {if (C('OUTPUT_ENCODE')) {$zlib = ini_get('zlib.output_compression');if (empty($zlib)) ob_start('ob_gzhandler');}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);tag('url_dispatch');if (C('VAR_FILTERS')) {$filters = explode(',', C('VAR_FILTERS'));foreach ($filters as $filter) {array_walk_recursive($_POST, $filter);array_walk_recursive($_GET, $filter);}}C('LOG_PATH', realpath(LOG_PATH) . '/');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') && C('APP_GROUP_MODE') == 0 ? 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;$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 = array_merge($_GET, $_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');return;}static public function logo() {return 'iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjVERDVENkZGQjkyNDExRTE5REY3RDQ5RTQ2RTRDQUJCIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjVERDVENzAwQjkyNDExRTE5REY3RDQ5RTQ2RTRDQUJCIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NURENUQ2RkRCOTI0MTFFMTlERjdENDlFNDZFNENBQkIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NURENUQ2RkVCOTI0MTFFMTlERjdENDlFNDZFNENBQkIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5fx6IRAAAMCElEQVR42sxae3BU1Rk/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';}}abstract class Action {protected $view = null;private $name = '';protected $config = array();public function __construct() {tag('action_begin', $this->config);$this->view = Think::instance('View');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->view->display($templateFile, $charset, $contentType, $content, $prefix);}protected function show($content, $charset = '', $contentType = '', $prefix = '') {$this->view->display('', $charset, $contentType, $content, $prefix);}protected function fetch($templateFile = '', $content = '', $prefix = '') {return $this->view->fetch($templateFile, $content, $prefix);}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 theme($theme) {$this->view->theme($theme);return $this;}protected function assign($name, $value = '') {$this->view->assign($name, $value);return $this;}public function __set($name, $value) {$this->assign($name, $value);}public function get($name = '') {return $this->view->get($name);}public function __get($name) {return $this->get($name);}public function __isset($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($this->view->parseTemplate())) {$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') && isset($_GET[C('VAR_URL_PARAMS') ])) {$input = array_merge($input, $_GET[C('VAR_URL_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;}Log::record('建议使用I方法替代' . $method, Log::NOTICE);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');switch (strtoupper($type)) {case 'JSON':header('Content-Type:application/json; charset=utf-8');exit(json_encode($data));case 'XML':header('Content-Type:text/xml; charset=utf-8');exit(xml_encode($data));case 'JSONP':header('Content-Type:application/json; charset=utf-8');$handler = isset($_GET[C('VAR_JSONP_HANDLER') ]) ? $_GET[C('VAR_JSONP_HANDLER') ] : C('DEFAULT_JSONP_HANDLER');exit($handler . '(' . json_encode($data) . ');');case 'EVAL':header('Content-Type:text/html; charset=utf-8');exit($data);default:tag('ajax_return', $data);}}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 (true === $ajax || IS_AJAX) {$data = is_array($ajax) ? $ajax : array();$data['info'] = $message;$data['status'] = $status;$data['url'] = $jumpUrl;$this->ajaxReturn($data);}if (is_int($ajax)) $this->assign('waitSecond', $ajax);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 (!isset($this->waitSecond)) $this->assign('waitSecond', '1');if (!isset($this->jumpUrl)) $this->assign("jumpUrl", $_SERVER["HTTP_REFERER"]);$this->display(C('TMPL_ACTION_SUCCESS'));} else {$this->assign('error', $message);if (!isset($this->waitSecond)) $this->assign('waitSecond', '3');if (!isset($this->jumpUrl)) $this->assign('jumpUrl', "javascript:history.back(-1);");$this->display(C('TMPL_ACTION_ERROR'));exit;}}public function __destruct() {tag('action_end');}}class View {protected $tVar = array();protected $theme = '';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)) {$templateFile = $this->parseTemplate($templateFile);if (!is_file($templateFile)) throw_exception(L('_TEMPLATE_NOT_EXIST_') . '[' . $templateFile . ']');}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;}public function parseTemplate($template = '') {$app_name = APP_NAME == basename(dirname($_SERVER['SCRIPT_FILENAME'])) && '' == __APP__ ? '' : APP_NAME . '/';if (is_file($template)) {$group = defined('GROUP_NAME') ? GROUP_NAME . '/' : '';$theme = C('DEFAULT_THEME');if (1 == C('APP_GROUP_MODE')) {define('THEME_PATH', dirname(BASE_LIB_PATH) . '/' . $group . basename(TMPL_PATH) . '/' . $theme);define('APP_TMPL_PATH', __ROOT__ . '/' . $app_name . C('APP_GROUP_PATH') . '/' . $group . basename(TMPL_PATH) . '/' . $theme);} else {define('THEME_PATH', TMPL_PATH . $group . $theme);define('APP_TMPL_PATH', __ROOT__ . '/' . $app_name . basename(TMPL_PATH) . '/' . $group . $theme);}return $template;}$depr = C('TMPL_FILE_DEPR');$template = str_replace(':', $depr, $template);$theme = $this->getTemplateTheme();$group = defined('GROUP_NAME') ? GROUP_NAME . '/' : '';if (defined('GROUP_NAME') && strpos($template, '@')) {list($group, $template) = explode('@', $template);$group.= '/';}if (1 == C('APP_GROUP_MODE')) {define('THEME_PATH', dirname(BASE_LIB_PATH) . '/' . $group . basename(TMPL_PATH) . '/' . $theme);define('APP_TMPL_PATH', __ROOT__ . '/' . $app_name . C('APP_GROUP_PATH') . '/' . $group . basename(TMPL_PATH) . '/' . $theme);} else {define('THEME_PATH', TMPL_PATH . $group . $theme);define('APP_TMPL_PATH', __ROOT__ . '/' . $app_name . basename(TMPL_PATH) . '/' . $group . $theme);}if ('' == $template) {$template = MODULE_NAME . $depr . ACTION_NAME;} elseif (false === strpos($template, '/')) {$template = MODULE_NAME . $depr . $template;}return THEME_PATH . $template . C('TMPL_TEMPLATE_SUFFIX');}public function theme($theme) {$this->theme = $theme;return $this;}private function getTemplateTheme() {if ($this->theme) {$theme = $this->theme;} else {$theme = C('DEFAULT_THEME');if (C('TMPL_DETECT_THEME')) {$t = C('VAR_TEMPLATE');if (isset($_GET[$t])) {$theme = $_GET[$t];} elseif (cookie('think_template')) {$theme = cookie('think_template');}if (!in_array($theme, explode(',', C('THEME_LIST')))) {$theme = C('DEFAULT_THEME');}cookie('think_template', $theme, 864000);}}define('THEME_NAME', $theme);return $theme ? $theme . '/' : '';}}L(array('_MODULE_NOT_EXIST_' => '无法加载模块','_ERROR_ACTION_' => '非法操作','_LANGUAGE_NOT_LOAD_' => '无法加载语言包','_TEMPLATE_NOT_EXIST_' => '模板不存在','_MODULE_' => '模块','_ACTION_' => '操作','_ACTION_NOT_EXIST_' => '控制器不存在或者没有定义','_MODEL_NOT_EXIST_' => '模型不存在或者没有定义','_VALID_ACCESS_' => '没有权限','_XML_TAG_ERROR_' => 'XML标签语法错误','_DATA_TYPE_INVALID_' => '非法数据对象!','_OPERATION_WRONG_' => '操作出现错误','_NOT_LOAD_DB_' => '无法加载数据库','_NO_DB_DRIVER_' => '无法加载数据库驱动','_NOT_SUPPORT_DB_' => '系统暂时不支持数据库','_NO_DB_CONFIG_' => '没有定义数据库配置','_NOT_SUPPERT_' => '系统不支持','_CACHE_TYPE_INVALID_' => '无法加载缓存类型','_FILE_NOT_WRITEABLE_' => '目录(文件)不可写','_METHOD_NOT_EXIST_' => '您所请求的方法不存在!','_CLASS_NOT_EXIST_' => '实例化一个不存在的类!','_CLASS_CONFLICT_' => '类名冲突','_TEMPLATE_ERROR_' => '模板引擎错误','_CACHE_WRITE_ERROR_' => '缓存文件写入失败!','_TAGLIB_NOT_EXIST_' => '标签库未定义','_OPERATION_FAIL_' => '操作失败!','_OPERATION_SUCCESS_' => '操作成功!','_SELECT_NOT_EXIST_' => '记录不存在!','_EXPRESS_ERROR_' => '表达式错误','_TOKEN_ERROR_' => '表单令牌错误','_RECORD_HAS_UPDATE_' => '记录已经更新','_NOT_ALLOW_PHP_' => '模板禁用PHP代码','_PARAM_ERROR_' => '参数错误或者未定义',));C(array('app_status' => 'debug','app_file_case' => false,'app_autoload_path' => '','app_tags_on' => true,'app_sub_domain_deploy' => false,'app_sub_domain_rules' => array() ,'app_sub_domain_deny' => array() ,'app_group_list' => 'Home,Admin','app_group_mode' => 0,'app_group_path' => 'Modules','action_suffix' => '','cookie_expire' => 0,'cookie_domain' => '','cookie_path' => '/','cookie_prefix' => '','default_m_layer' => 'Model','default_c_layer' => 'Action','default_v_layer' => 'Tpl','default_app' => '@','default_lang' => 'zh-cn','default_theme' => '','default_group' => 'Home','default_module' => 'Index','default_action' => 'index','default_charset' => 'utf-8','default_timezone' => 'PRC','default_ajax_return' => 'JSON','default_jsonp_handler' => 'jsonpReturn','default_filter' => 'htmlspecialchars','db_type' => 'mysql','db_host' => 'localhost','db_name' => 'employees','db_user' => 'root','db_pwd' => 'pq52ss63','db_port' => '3306','db_prefix' => '','db_fieldtype_check' => false,'db_fields_cache' => true,'db_charset' => 'utf8','db_deploy_type' => 0,'db_rw_separate' => false,'db_master_num' => 1,'db_slave_no' => '','db_sql_build_cache' => false,'db_sql_build_queue' => 'file','db_sql_build_length' => 20,'db_sql_log' => false,'data_cache_time' => 0,'data_cache_compress' => false,'data_cache_check' => false,'data_cache_prefix' => '','data_cache_type' => 'File','data_cache_path' => './App/Runtime/Temp/','data_cache_subdir' => false,'data_path_level' => 1,'error_message' => '页面错误!请稍后再试~','error_page' => '','show_error_msg' => false,'trace_exception' => false,'log_record' => false,'log_type' => 3,'log_dest' => '','log_extra' => '','log_level' => 'EMERG,ALERT,CRIT,ERR','log_file_size' => 2097152,'log_exception_record' => false,'session_auto_start' => true,'session_options' => array() ,'session_type' => '','session_prefix' => '','tmpl_content_type' => 'text/html','tmpl_action_error' => 'E:\\www\\haodou\\ithink\\ThinkPHP/Tpl/dispatch_jump.tpl','tmpl_action_success' => 'E:\\www\\haodou\\ithink\\ThinkPHP/Tpl/dispatch_jump.tpl','tmpl_exception_file' => 'E:\\www\\haodou\\ithink\\ThinkPHP/Tpl/think_exception.tpl','tmpl_detect_theme' => false,'tmpl_template_suffix' => '.html','tmpl_file_depr' => '/','url_case_insensitive' => false,'url_model' => 1,'url_pathinfo_depr' => '/','url_pathinfo_fetch' => 'ORIG_PATH_INFO,REDIRECT_PATH_INFO,REDIRECT_URL','url_html_suffix' => 'html','url_deny_suffix' => 'ico|png|gif|jpg','url_params_bind' => true,'url_404_redirect' => '','var_group' => 'g','var_module' => 'm','var_action' => 'a','var_ajax_submit' => 'ajax','var_jsonp_handler' => 'callback','var_pathinfo' => 's','var_url_params' => '_URL_','var_template' => 't','var_filters' => 'filter_exp','output_encode' => false,'http_cache_control' => 'private','extends' => array('app_init' => array() ,'app_begin' => array(0 => 'ReadHtmlCache',) ,'route_check' => array(0 => 'CheckRoute',) ,'app_end' => array() ,'path_info' => array() ,'action_begin' => array() ,'action_end' => array() ,'view_begin' => array() ,'view_parse' => array(0 => 'ParseTemplate',) ,'view_filter' => array(0 => 'ContentReplace',1 => 'TokenBuild',2 => 'WriteHtmlCache',3 => 'ShowRuntime',) ,'view_end' => array(0 => 'ShowPageTrace',) ,) ,));G('loadTime');Think::Start();

转载于:https://my.oschina.net/ym80/blog/203897

Thinkphp ~runtime.php相关推荐

  1. ThinkPHP缓存文件写入失败

    情况:Windows下网站直接拷贝至Ubuntu 1.删除cache下的所有临时文件.(需保留Thinkphp Runtime下的文件结构,删除文件内容) 2.提权,在Linux命令行输入 sudo ...

  2. 使用thinkPhp,修改线上数据库的配置,请删除 Runtime 中的所有内容后重试

    2019独角兽企业重金招聘Python工程师标准>>> 使用thinkPhp,修改线上数据库的配置,请删除 Runtime 中的所有内容后重试 转载于:https://my.osch ...

  3. iis php 缓存时间,推荐 IIS7.0下ThinkPHP提示“缓存文件写入失败!” 需要设置user的权限即可 Home/Runtime/Cache/...

    IIS7.0下ThinkPHP提示"缓存文件写入失败!" 字号+作者:有田笔记 来源:有田笔记WP老站 2015-12-11 01:05 我要评论() 收藏成功收藏本文 :(缓存文 ...

  4. ThinkPHP缓存文件写入失败!:./Runtime/Cache/..

    最近在学习ThinkPHP框架,从网上down了一个项目,在本地配置这个项目时,出现了一个问题,无法写入/Runtime/Cache缓存,这个问题是权限问题,首先要看看在自己的项目/Applicati ...

  5. 推荐 IIS7.0下ThinkPHP提示“缓存文件写入失败!” 需要设置user的权限即可 Home/Runtime/Cache/

    IIS7.0下ThinkPHP提示"缓存文件写入失败!" 字号+作者:有田笔记 来源:有田笔记WP老站 2015-12-11 01:05 我要评论() 收藏成功收藏本文 :(缓存文 ...

  6. Linux环境thinkphp配置以及数据源驱动修改

    项目中需要用到thinkphp,以下简称tp. linux版本:64位CentOS 6.4 Nginx版本:nginx1.8.0 php版本:php5.5.28 thinkphp版:3.2.3 1.安 ...

  7. ThinkPHP 框架学习

    学习内容全部参考开发手册  建议收藏网页 https://www.kancloud.cn/manual/thinkphp/1696 一.几个概念 应用:基于同一个入口文件访问的项目称之为一个应用 模块 ...

  8. tHINKpHP认识---文件了解

    在这个一篇文章中我们将利用ThinkPhp框架来实现一个简单使用html模板文档来输出php变量,这个地方使用时thinkPHP3.2.3,首先是我们引入写好入口文件之后,生成了在Applicatio ...

  9. php面试框架的执行流程图,ThinkPHP2.2框架执行流程图,ThinkPHP控制器的执行流程

    ThinkPHP2.2框架执行原理.流程图在线手册 ThinkPHP控制器的执行流程 对用户的第一次URL访问http:///My/index.php/Index/show/所执行的流程进行详细的分析 ...

最新文章

  1. C# Winform程序中使用TeeChart实现简单的图表展示
  2. 一文搞定JS中的DOM基础与进阶
  3. andriod 开发记录apidemos 错误解决
  4. html5 绘制图形,HTML5绘制几何图形
  5. java集合浅谈(一)
  6. jQuery中this与$(this)区别
  7. 用VB.NET(Visual Basic 2010)封装EXCEL VBA为DLL_COM组件(二)
  8. sm2算法c 语言实现,移远通信集成国密安全解决方案的C-V2X AP模组商用落地
  9. c语言编写的程序不具备移植性,《C语言》试卷1
  10. C语言编程题目(精心准备,特别适合C语言小白)
  11. android 如何调用 无线投影,无线投影仪怎么连接?答案在此,效率快得没话说
  12. 个税计算公式excel_财务不会做工资表?全函数统计查询、自动个税计算模板送你,给力...
  13. 外卖分销分佣小程序外卖cps小程序返利系统源码分享
  14. 东方财富股吧评论爬虫和情绪分析
  15. app模式会被第三方平台模式取代吗_那些逐渐被系统功能取代的第三方APP,你知道多少?...
  16. huffman python,哈夫曼(Huffman)编码python代码实现
  17. Linux实验精华总结
  18. IntelliJ IDEA商业版 -- 破解
  19. 【计算机网络相关的面试题】TCPUDPHTTPHTTPS,面试常客
  20. 【JavaScript】什么是JavaScript?

热门文章

  1. c语言健康指数,中国汽车健康指数
  2. 【Redis-6.0.8】事件循环器AE(下)
  3. 搞大数据,你不懂这三大数据处理趋势就OUT了
  4. 刘德华--8影子女人
  5. 怎么样看所有人都觉得很可爱
  6. 寻找外贸客户邮箱的9点技巧
  7. python 适合做什么生意赚钱投资小_python实用小项目实例|投资公司的规章制度
  8. android support v7 v13,Android support V3 v7 v13的差别
  9. ceph部分数据所有副本先后故障的抢救
  10. NetSuite到岸成本(LC VS Estimated LC)