示例#1
0
 private static function requireHtmlCache()
 {
     // 分析当前的静态规则
     $htmls = C('_htmls_');
     // 读取静态规则
     if (!empty($htmls)) {
         // 静态规则文件定义格式 actionName=>array(‘静态规则’,’缓存时间’,’附加规则')
         // 'read'=>array('{id},{name}',60,'md5') 必须保证静态规则的唯一性 和 可判断性
         // 检测静态规则
         if (isset($htmls[strtolower(GROUP_NAME . ':' . MODULE_NAME . ':' . ACTION_NAME)])) {
             $html = $htmls[strtolower(GROUP_NAME . ':' . MODULE_NAME . ':' . ACTION_NAME)];
             // 某个模块的操作的静态规则
         } elseif (isset($htmls[MODULE_NAME . ':' . ACTION_NAME])) {
             $html = $htmls[MODULE_NAME . ':' . ACTION_NAME];
             // 某个模块的操作的静态规则
         } elseif (isset($htmls[MODULE_NAME . ':'])) {
             // 某个模块的静态规则
             $html = $htmls[MODULE_NAME . ':'];
         } elseif (isset($htmls[ACTION_NAME])) {
             $html = $htmls[ACTION_NAME];
             // 所有操作的静态规则
         } elseif (isset($htmls['*'])) {
             $html = $htmls['*'];
             // 全局静态规则
         } elseif (isset($htmls['Empty:index']) && !class_exists(MODULE_NAME . 'Action')) {
             $html = $htmls['Empty:index'];
             // 空模块静态规则
         } elseif (isset($htmls[MODULE_NAME . ':_empty']) && self::isEmptyAction(MODULE_NAME, ACTION_NAME)) {
             $html = $htmls[MODULE_NAME . ':_empty'];
             // 空操作静态规则
         }
         if (!empty($html)) {
             self::$requireCache = true;
             // 需要缓存
             // 解读静态规则
             $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(array('{:app}', '{:module}', '{:action}', '{:group}'), array(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);
             }
             // 应用附加函数
             self::$cacheTime = isset($html[1]) ? $html[1] : C('HTML_CACHE_TIME');
             // 缓存有效期
             // 当前缓存文件
             define('HTML_FILE_NAME', HTML_PATH . $rule . C('HTML_FILE_SUFFIX'));
             return true;
         }
     }
     // 无需缓存
     return false;
 }
 /**
 +----------------------------------------------------------
 * 读取静态缓存
 +----------------------------------------------------------
 * @access static 
 +----------------------------------------------------------
 * @return void 
 +----------------------------------------------------------
 * @throws ThinkExecption
 +----------------------------------------------------------
 */
 static function readHTMLCache()
 {
     if (file_exists(CONFIG_PATH . '_htmls.php')) {
         // 读取静态规则文件
         // 静态规则文件定义格式 actionName=>array(‘静态规则’,’缓存时间’,’附加规则')
         // 'read'=>array('{id},{name}',60,'md5') 必须保证静态规则的唯一性 和 可判断性
         $htmls = (include CONFIG_PATH . '_htmls.php');
         if (!is_array($htmls)) {
             $htmls = $_htmls;
         }
         // 检测操作的静态规则
         if (isset($htmls[MODULE_NAME . ':' . ACTION_NAME])) {
             // 定义了某个模块的操作的静态规则
             $html = $htmls[MODULE_NAME . ':' . ACTION_NAME];
         } elseif (isset($htmls[ACTION_NAME])) {
             // 所有操作的静态规则
             $html = $htmls[ACTION_NAME];
         } elseif (isset($htmls['*'])) {
             // 定义了全局的静态规则
             $html = $htmls['*'];
         }
         if (!empty($html)) {
             self::$requireCache = true;
             // 解读静态规则
             $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(array('{:app}', '{:module}', '{:action}'), array(APP_NAME, MODULE_NAME, ACTION_NAME), $rule);
             // {|FUN} 单独使用函数
             $rule = preg_replace('/{|(\\w+)}/e', "\\1()", $rule);
             if (!empty($html[2])) {
                 // 应用附加函数
                 $rule = $html[2]($rule);
             }
             $time = $html[1] ? $html[1] : C('HTML_CACHE_TIME');
             // 缓存有效期 -1 为永久缓存
             self::$cacheTime = $time;
             $cacheName = $rule . C('HTML_FILE_SUFFIX');
             self::$cacheFile = $cacheName;
             define('HTML_FILE_NAME', C('HTML_PATH') . $cacheName);
             if (self::checkHTMLCache(HTML_FILE_NAME, $time)) {
                 //静态页面有效
                 if (C('HTML_READ_TYPE') == 1) {
                     // 重定向到静态页面
                     redirect(str_replace(realpath($_SERVER["DOCUMENT_ROOT"]), '', realpath(HTML_FILE_NAME)));
                 } else {
                     // 读取静态页面输出
                     readfile(HTML_FILE_NAME);
                     exit;
                 }
             }
         }
     }
     return;
 }