function build_runtime_cache($append = '') { // 生成编译文件 $defs = get_defined_constants(TRUE); $content = '$GLOBALS[\'_beginTime\'] = microtime(TRUE);'; //[sae]编译SaeMC核心 $content .= compile(SAE_PATH . 'Lib/Core/SaeMC.class.php'); if (defined('RUNTIME_DEF_FILE')) { //[sae] 编译后的常量文件外部引入 SaeMC::set(RUNTIME_DEF_FILE, '<?php ' . array_define($defs['user'])); $content .= 'SaeMC::include_file(\'' . RUNTIME_DEF_FILE . '\');'; } else { $content .= array_define($defs['user']); } $content .= 'set_include_path(get_include_path() . PATH_SEPARATOR . VENDOR_PATH);'; //[sae] 读取核心编译文件列表 $list = array(SAE_PATH . 'Common/common.php', SAE_PATH . 'Lib/Core/Think.class.php', CORE_PATH . 'Core/ThinkException.class.php', CORE_PATH . 'Core/Behavior.class.php'); foreach ($list as $file) { $content .= compile($file); } // 系统行为扩展文件统一编译 if (C('APP_TAGS_ON')) { $content .= build_tags_cache(); } //[sae] 编译SAE的alias $alias = (include SAE_PATH . 'Conf/alias.php'); $content .= 'alias_import(' . var_export($alias, true) . ');'; // 编译框架默认语言包和配置参数 $content .= $append . "\nL(" . var_export(L(), true) . ");C(" . var_export(C(), true) . ');G(\'loadTime\');Think::Start();'; //[sae] 生成编译缓存文件 SaeMC::set(RUNTIME_FILE, strip_whitespace('<?php ' . $content)); }
/** +---------------------------------------------------------- * 加载主模板并缓存 +---------------------------------------------------------- * @access public +---------------------------------------------------------- * @param string $tmplTemplateFile 模板文件 +---------------------------------------------------------- * @return string +---------------------------------------------------------- * @throws ThinkExecption +---------------------------------------------------------- */ public function loadTemplate($tmplTemplateFile) { $this->templateFile = $tmplTemplateFile; //[sae] 根据模版文件名定位缓存文件 $tmplCacheFile = md5($tmplTemplateFile) . $this->config['cache_suffix']; // 读取模板文件内容 $tmplContent = file_get_contents($tmplTemplateFile); // 判断是否启用布局 if (C('LAYOUT_ON')) { if (false !== strpos($tmplContent, '{__NOLAYOUT__}')) { // 可以单独定义不使用布局 $tmplContent = str_replace('{__NOLAYOUT__}', '', $tmplContent); } else { // 替换布局的主体内容 $layoutFile = THEME_PATH . C('LAYOUT_NAME') . $this->config['template_suffix']; $tmplContent = str_replace($this->config['layout_item'], $tmplContent, file_get_contents($layoutFile)); } } //编译模板内容 $tmplContent = $this->compiler($tmplContent); //[sae]去掉检测分组目录 //[sae]重写Cache文件 SaeMC::set($tmplCacheFile, trim($tmplContent)); return $tmplCacheFile; }
function build_runtime_cache($append = '') { // 生成编译文件 $defs = get_defined_constants(TRUE); $content = '$GLOBALS[\'_beginTime\'] = microtime(TRUE);'; //[sae]编译SaeMC核心 $content .= compile(SAE_PATH . 'Lib/Core/SaeMC.class.php'); $defs['user']['APP_DEBUG'] = false; //[sae] 关闭调试 if (defined('RUNTIME_DEF_FILE')) { //[sae] 编译后的常量文件外部引入 SaeMC::set(RUNTIME_DEF_FILE, '<?php ' . array_define($defs['user'])); $content .= 'SaeMC::include_file(\'' . RUNTIME_DEF_FILE . '\');'; } else { $content .= array_define($defs['user']); } $content .= 'set_include_path(get_include_path() . PATH_SEPARATOR . VENDOR_PATH);'; //[sae] 读取核心编译文件列表 $list = array(SAE_PATH . 'Common/common.php', SAE_PATH . 'Common/sae_common.php', SAE_PATH . 'Lib/Core/Think.class.php', CORE_PATH . 'Core/ThinkException.class.php', CORE_PATH . 'Core/Behavior.class.php'); foreach ($list as $file) { $content .= compile($file); } // 系统行为扩展文件统一编译 $content .= build_tags_cache(); //[sae] 编译SAE的alias //$alias = include SAE_PATH.'Conf/alias.php'; //$content .= 'alias_import('.var_export($alias,true).');'; // 编译框架默认语言包和配置参数 // [sae_runtime] 对配置中的SAE常量进行处理。 配置项的值如果是 ~func() 的字符串 则会 编译为 执行func函数。主要是为了处理 sae_storage_root 函数在SAE_RUNTIME模式下的使用 $content .= $append . "\nL(" . var_export(L(), true) . ");C(" . preg_replace(array('/\'SAE_(.*?)\'/e', '/\'~([a-zA-Z_][a-zA-Z0-9_]*)\\((.*?)\\)\'/'), array('parse_sae_define("\\1")', '\\1(\\2)'), var_export(C(), true)) . ');G(\'loadTime\');Think::Start();'; //[sae] 生成编译缓存文件 SaeMC::set(RUNTIME_FILE, strip_whitespace('<?php ' . str_replace("defined('THINK_PATH') or exit();", ' ', $content))); }