From ea6a67b5d5ab8e3fd14d833981c53266d92c17f8 Mon Sep 17 00:00:00 2001 From: thinkphp Date: Tue, 8 Dec 2015 17:28:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E8=A1=8C=E4=B8=BA=E6=89=A9?= =?UTF-8?q?=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/behavior/content_replace.php | 72 ------------- library/behavior/location_template.php | 49 --------- library/behavior/read_html_cache.php | 139 ------------------------- library/behavior/show_page_trace.php | 98 ----------------- library/behavior/token_build.php | 71 ------------- 5 files changed, 429 deletions(-) delete mode 100644 library/behavior/content_replace.php delete mode 100644 library/behavior/location_template.php delete mode 100644 library/behavior/read_html_cache.php delete mode 100644 library/behavior/show_page_trace.php delete mode 100644 library/behavior/token_build.php diff --git a/library/behavior/content_replace.php b/library/behavior/content_replace.php deleted file mode 100644 index 5d9e5c0a..00000000 --- a/library/behavior/content_replace.php +++ /dev/null @@ -1,72 +0,0 @@ - -// +---------------------------------------------------------------------- - -namespace think\behavior; - -use think\Config; - -/** - * 系统行为扩展:模板内容输出替换 - */ -class ContentReplace -{ - - // 行为扩展的执行入口必须是run - public function run(&$content) - { - $content = $this->templateContentReplace($content); - } - - /** - * 模板内容替换 - * @access protected - * @param string $content 模板内容 - * @return string - */ - protected function templateContentReplace($content) - { - if(IS_CGI) { - //CGI/FASTCGI模式下 - $_temp = explode('.php',$_SERVER['PHP_SELF']); - $script_name = rtrim(str_replace($_SERVER['HTTP_HOST'],'',$_temp[0].'.php'),'/'); - } else { - $script_name = rtrim($_SERVER['SCRIPT_NAME'],'/'); - } - define('ROOT_URL', rtrim(dirname(str_replace("\\","\/",$script_name)),'/')); - define('MODULE_URL', ROOT_URL.'/'.(defined('MODULE_ALIAS')?MODULE_ALIAS:MODULE_NAME)); - define('CONTROLLER_URL', MODULE_URL.'/'.CONTROLLER_NAME); - define('ACTION_URL', CONTROLLER_URL.'/'.ACTION_NAME); - - // 系统默认的特殊变量替换 - $replace = [ - // 当前网站地址 - '__ROOT__' => ROOT_URL, - // 当前项目地址 - '__APP__' => MODULE_URL, - // 当前操作地址 - '__CONTROLL__' => CONTROLLER_URL, - '__URL__' => CONTROLLER_URL, - // 当前操作地址 - '__ACTION__' => ACTION_URL, - // 当前页面地址 - '__SELF__' => $_SERVER['PHP_SELF'], - // 站点公共目录 - '__PUBLIC__' => ROOT_URL.'/Public', - ]; - // 允许用户自定义模板的字符串替换 - if(is_array(Config::get('tmpl_parse_string')) ){ - $replace = array_merge($replace,Config::get('tmpl_parse_string')); - } - $content = str_replace(array_keys($replace),array_values($replace),$content); - return $content; - } - -} diff --git a/library/behavior/location_template.php b/library/behavior/location_template.php deleted file mode 100644 index bd7f3095..00000000 --- a/library/behavior/location_template.php +++ /dev/null @@ -1,49 +0,0 @@ - -// +---------------------------------------------------------------------- - -namespace think\behavior; - -/** - * 系统行为扩展:定位模板文件 - */ -class LocationTemplate -{ - // 行为扩展的执行入口必须是run - public function run(&$templateFile) - { - // 自动定位模板文件 - if (!is_file($templateFile)) { - $templateFile = $this->parseTemplateFile($templateFile); - } - } - - /** - * 自动定位模板文件 - * @access private - * - * @param $template - * - * @return string - * @internal param string $templateFile 文件名 - */ - private function parseTemplateFile($template) - { - $template = str_replace(':', '/', $template); - if ('' == $template) { - // 如果模板文件名为空 按照默认规则定位 - $template = CONTROLLER_NAME . '/' . ACTION_NAME; - } elseif (false === strpos($template, '/')) { - $template = CONTROLLER_NAME . '/' . $template; - } - $templateFile = MODULE_PATH . 'view/' . $template . '.html'; - return $templateFile; - } -} diff --git a/library/behavior/read_html_cache.php b/library/behavior/read_html_cache.php deleted file mode 100644 index 5ce12620..00000000 --- a/library/behavior/read_html_cache.php +++ /dev/null @@ -1,139 +0,0 @@ - -// +---------------------------------------------------------------------- - -namespace think\behavior; - -/** - * 系统行为扩展:静态缓存读取 - * @category Think - * @package Think - * @subpackage Behavior - * @author liu21st - */ -class ReadHtmlCache -{ - protected $options = [ - 'HTML_CACHE_ON' => false, - 'HTML_CACHE_TIME' => 60, - 'HTML_CACHE_RULES' => [], - 'HTML_FILE_SUFFIX' => '.html', - ]; - - // 行为扩展的执行入口必须是run - public function run(&$params) - { - // 开启静态缓存 - if (C('HTML_CACHE_ON')) { - $cacheTime = self::requireHtmlCache(); - if (false !== $cacheTime && self::checkHTMLCache(HTML_FILE_NAME, $cacheTime)) { - //静态页面有效 - // 读取静态页面输出 - readfile(HTML_FILE_NAME); - exit(); - } - } - } - - // 判断是否需要静态缓存 - private static function requireHtmlCache() - { - // 分析当前的静态规则 - $htmls = C('HTML_CACHE_RULES'); // 读取静态规则 - if (!empty($htmls)) { - $htmls = array_change_key_case($htmls); - // 静态规则文件定义格式 actionName=>array('静态规则','缓存时间','附加规则') - // 'read'=>array('{id},{name}',60,'md5') 必须保证静态规则的唯一性 和 可判断性 - // 检测静态规则 - $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); - // {ID|FUN} GET变量的简写 - $rule = preg_replace('/{(\w+)\|(\w+)}/e', "\\2(\$_GET['\\1'])", $rule); - $rule = preg_replace('/{(\w+)}/e', "\$_GET['\\1']", $rule); - // 特殊系统变量 - $rule = str_ireplace( - ['{:app}', '{:module}', '{:action}', '{:group}'], - [APP_NAME, MODULE_NAME, ACTION_NAME, defined('GROUP_NAME') ? GROUP_NAME : ''], - $rule); - // {|FUN} 单独使用函数 - $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; - } - - /** - * 检查静态HTML文件是否有效 - * 如果无效需要重新更新 - * @access public - * @param string $cacheFile 静态文件名 - * @param integer $cacheTime 缓存有效期 - * @return bool - */ - public static 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 (0 != $cacheTime && NOW_TIME > filemtime($cacheFile) + $cacheTime) { - // 文件是否在有效期 - return false; - } - //静态文件有效 - return true; - } - - //检测是否是空操作 - private static function isEmptyAction($module, $action) - { - $className = $module . 'Action'; - $class = new $className; - return !method_exists($class, $action); - } -} diff --git a/library/behavior/show_page_trace.php b/library/behavior/show_page_trace.php deleted file mode 100644 index 2fcc9163..00000000 --- a/library/behavior/show_page_trace.php +++ /dev/null @@ -1,98 +0,0 @@ - -// +---------------------------------------------------------------------- - -namespace think\behavior; - -use think\Config; -use think\Debug; -use think\Log; - -/** - * 系统行为扩展:页面Trace显示输出 - * @category Think - * @package Think - * @subpackage Behavior - * @author liu21st - */ -class ShowPageTrace -{ - - // 行为扩展的执行入口必须是run - public function run(&$params) - { - if (!IS_AJAX && Config::get('show_page_trace')) { - echo $this->showTrace(); - } - } - - /** - * 显示页面Trace信息 - * @access private - */ - private function showTrace() - { - // 系统默认显示信息 - $files = get_included_files(); - $info = []; - foreach ($files as $key => $file) { - $info[] = $file . ' ( ' . number_format(filesize($file) / 1024, 2) . ' KB )'; - } - $trace = []; - Debug::remark('START', NOW_TIME); - $base = [ - '请求信息' => date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']) . ' ' . $_SERVER['SERVER_PROTOCOL'] . ' ' . $_SERVER['REQUEST_METHOD'] . ' : ' . $_SERVER['PHP_SELF'], - '运行时间' => Debug::getUseTime('START', 'END', 6) . 's', - '内存开销' => MEMORY_LIMIT_ON ? G('START', 'END', 'm') . 'b' : '不支持', - '查询信息' => N('db_query') . ' queries ' . N('db_write') . ' writes ', - '文件加载' => count($files), - '缓存信息' => N('cache_read') . ' gets ' . N('cache_write') . ' writes ', - '配置加载' => count(Config::get()), - ]; - // 读取项目定义的Trace文件 - $traceFile = MODULE_PATH . 'trace.php'; - if (is_file($traceFile)) { - $base = array_merge($base, include $traceFile); - } - $debug = Log::getLog(); - $tabs = Config::get('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 = []; - foreach ($array as $name) { - $result += isset($debug[$name]) ? $debug[$name] : []; - } - $trace[$title] = $result; - } else { - $trace[$title] = isset($debug[$name]) ? $debug[$name] : ''; - } - } - } - unset($files, $info, $base, $debug); - // 调用Trace页面模板 - ob_start(); - include Config::has('tmpl_trace_file') ? Config::get('tmpl_trace_file') : THINK_PATH . 'tpl/page_trace.tpl'; - return ob_get_clean(); - } -} diff --git a/library/behavior/token_build.php b/library/behavior/token_build.php deleted file mode 100644 index bb22c180..00000000 --- a/library/behavior/token_build.php +++ /dev/null @@ -1,71 +0,0 @@ - -// +---------------------------------------------------------------------- -namespace think\behavior; - -use think\Behavior; - -/** - * 系统行为扩展:表单令牌生成 - * @category Think - * @package Think - * @subpackage Behavior - * @author liu21st - */ -class TokenBuild extends Behavior -{ - // 行为参数定义 - protected $options = [ - // 开启令牌验证 - '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] = []; - } - // 标识当前页面唯一性 - $tokenKey = md5($_SERVER['REQUEST_URI']); - if (isset($_SESSION[$tokenName][$tokenKey])) { - // 相同页面不重复生成session - $tokenValue = $_SESSION[$tokenName][$tokenKey]; - } else { - $tokenValue = $tokenType(microtime(true)); - $_SESSION[$tokenName][$tokenKey] = $tokenValue; - } - $token = ''; - return $token; - } -}