📄 smarty.class.php
字号:
}
include $compile_path;
if ($this->show_info_include)
{
echo (('
<!-- SMARTY_END: '.$_smarty_tpl_file).' -->
');
}
}
$_smarty_results = ob_get_contents ();
ob_end_clean ();
}
if ($_smarty_trusted)
{
$this->security = true;
}
if ($this->caching)
{
$this->_write_cache_file ($_smarty_tpl_file, $_smarty_cache_id, $_smarty_compile_id, $_smarty_results);
$_smarty_results = $this->_process_cached_inserts ($_smarty_results);
}
if ($_smarty_display)
{
if (isset ($_smarty_results))
{
echo $_smarty_results;
}
if ($this->debugging)
{
$this->_smarty_debug_info[$included_tpls_idx]['exec_time'] = ($this->_get_microtime () - $debug_start_time);
echo $this->_generate_debug_output ();
}
return null;
}
else
{
if (isset ($_smarty_results))
{
return $_smarty_results;
}
}
}
function _assign_smarty_interface ()
{
$egpcs = array ('e' => 'env', 'g' => 'get', 'p' => 'post', 'c' => 'cookies', 's' => 'server');
$globals_map = array ('get' => 'HTTP_GET_VARS', 'post' => 'HTTP_POST_VARS', 'cookies' => 'HTTP_COOKIE_VARS', 'session' => 'HTTP_SESSION_VARS', 'server' => 'HTTP_SERVER_VARS', 'env' => 'HTTP_ENV_VARS');
$smarty = array ('request' => array ());
foreach ($globals_map as $key => $array)
{
$smarty[$key] = (isset ($GLOBALS[$array]) ? $GLOBALS[$array] : array ());
}
foreach (preg_split ('!!', strtolower ($this->request_vars_order)) as $c)
{
if (isset ($egpcs[$c]))
{
$smarty['request'] = array_merge ($smarty['request'], $smarty[$egpcs[$c]]);
continue;
}
}
$smarty['request'] = array_merge ($smarty['request'], $smarty['session']);
$this->_smarty_vars = $smarty;
}
function _generate_debug_output ()
{
ob_start ();
$force_compile_orig = $this->force_compile;
$this->force_compile = true;
$compile_path = $this->_get_compile_path ($this->debug_tpl);
if ($this->_process_template ($this->debug_tpl, $compile_path))
{
if ($this->show_info_include)
{
echo (('
<!-- SMARTY_BEGIN: '.$this->debug_tpl).' -->
');
}
include $compile_path;
if ($this->show_info_include)
{
echo (('
<!-- SMARTY_END: '.$this->debug_tpl).' -->
');
}
}
$results = ob_get_contents ();
$this->force_compile = $force_compile_orig;
ob_end_clean ();
return $results;
}
function _is_trusted ($resource_type, $resource_name)
{
$_smarty_trusted = false;
if (!empty ($this->trusted_dir))
{
if (($resource_type == 'file'))
{
if (!empty ($this->trusted_dir))
{
foreach ((array)$this->trusted_dir as $curr_dir)
{
if ((!empty ($curr_dir) AND is_readable ($curr_dir)))
{
if ((substr (realpath ($resource_name), 0, strlen (realpath ($curr_dir))) == realpath ($curr_dir)))
{
$_smarty_trusted = true;
break;
}
continue;
}
}
}
}
else
{
$_smarty_trusted = false;
}
}
return $_smarty_trusted;
}
function _is_secure ($resource_type, $resource_name)
{
if ((!$this->security OR $this->security_settings['INCLUDE_ANY']))
{
return true;
}
$_smarty_secure = false;
if (($resource_type == 'file'))
{
if (!empty ($this->secure_dir))
{
foreach ((array)$this->secure_dir as $curr_dir)
{
if ((!empty ($curr_dir) AND is_readable ($curr_dir)))
{
if ((substr (realpath ($resource_name), 0, strlen (realpath ($curr_dir))) == realpath ($curr_dir)))
{
$_smarty_secure = true;
break;
}
continue;
}
}
}
}
else
{
$_smarty_secure = true;
}
return $_smarty_secure;
}
function _process_template ($tpl_file, $compile_path)
{
if ((!$this->force_compile AND $this->_compiled_template_exists ($compile_path)))
{
if (!$this->compile_check)
{
return true;
}
else
{
if (!$this->_fetch_template_info ($tpl_file, $template_source, $template_timestamp))
{
return false;
}
if (($template_timestamp <= $this->_fetch_compiled_template_timestamp ($compile_path)))
{
return true;
}
else
{
$this->_compile_template ($tpl_file, $template_source, $template_compiled);
$this->_write_compiled_template ($compile_path, $template_compiled);
return true;
}
}
}
else
{
if (!$this->_fetch_template_info ($tpl_file, $template_source, $template_timestamp))
{
return false;
}
$this->_compile_template ($tpl_file, $template_source, $template_compiled);
$this->_write_compiled_template ($compile_path, $template_compiled);
return true;
}
}
function _get_compile_path ($tpl_file)
{
return $this->_get_auto_filename ($this->compile_dir, $tpl_file, $this->_compile_id);
}
function _compiled_template_exists ($include_path)
{
return file_exists ($include_path);
}
function _fetch_compiled_template_timestamp ($include_path)
{
return filemtime ($include_path);
}
function _write_compiled_template ($compile_path, $template_compiled)
{
$this->_write_file ($compile_path, $template_compiled, true);
return true;
}
function _parse_file_path ($file_base_path, $file_path, &$resource_type, &$resource_name)
{
$file_path_parts = explode (':', $file_path, 2);
if ((count ($file_path_parts) == 1))
{
$resource_type = 'file';
$resource_name = $file_path_parts[0];
}
else
{
$resource_type = $file_path_parts[0];
$resource_name = $file_path_parts[1];
}
if (($resource_type == 'file'))
{
if (!preg_match ('/^([\\/\\\\]|[a-zA-Z]:[\\/\\\\])/', $resource_name))
{
foreach ((array)$file_base_path as $curr_path)
{
if (is_file ((($curr_path.'/').$resource_name)))
{
$resource_name = (($curr_path.'/').$resource_name);
return true;
continue;
}
}
return false;
}
}
return true;
}
function _fetch_template_info ($tpl_path, &$template_source, &$template_timestamp, $get_source = true)
{
$_return = false;
if ($this->_parse_file_path ($this->template_dir, $tpl_path, $resource_type, $resource_name))
{
switch ($resource_type)
{
case 'file':
{
if (is_file ($resource_name))
{
if ($get_source)
{
$template_source = $this->_read_file ($resource_name);
}
$template_timestamp = filemtime ($resource_name);
$_return = true;
break;
}
break;
}
default:
{
if (isset ($this->resource_funcs[$resource_type]))
{
$funcname = $this->resource_funcs[$resource_type];
if (function_exists ($funcname))
{
$_return = $funcname ($resource_name, $template_source, $template_timestamp, $get_source, $this);
break;
}
break;
}
break;
}
}
}
if (!$_return)
{
if (!empty ($this->default_template_handler_func))
{
if (!function_exists ($this->default_template_handler_func))
{
$this->_trigger_error_msg ((((''.'default template handler function "').$this->default_template_handler_func).'" doesn\'t exist.'));
$_return = false;
}
$funcname = $this->default_template_handler_func;
$_return = $funcname ($resource_type, $resource_name, $template_source, $template_timestamp, $this);
}
}
if (!$_return)
{
$this->_trigger_error_msg ((((''.'unable to read template resource: "').$tpl_path).'"'));
}
else
{
if (((($_return AND $this->security) AND !$this->_is_secure ($resource_type, $resource_name)) AND !$this->_is_trusted ($resource_type, $resource_name)))
{
$this->_trigger_error_msg ((((''.'(secure mode) accessing "').$tpl_path).'" is not allowed'));
$template_source = null;
$template_timestamp = null;
return false;
}
}
return $_return;
}
function _compile_template ($tpl_file, $template_source, &$template_compiled)
{
include_once ((SMARTY_DIR.$this->compiler_class).'.class.php');
$smarty_compiler = new $this->compiler_class ();
$smarty_compiler->template_dir = $this->template_dir;
$smarty_compiler->compile_dir = $this->compile_dir;
$smarty_compiler->config_dir = $this->config_dir;
$smarty_compiler->force_compile = $this->force_compile;
$smarty_compiler->caching = $this->caching;
$smarty_compiler->php_handling = $this->php_handling;
$smarty_compiler->left_delimiter = $this->left_delimiter;
$smarty_compiler->right_delimiter = $this->right_delimiter;
$smarty_compiler->custom_funcs = $this->custom_funcs;
$smarty_compiler->custom_mods = $this->custom_mods;
$smarty_compiler->_version = $this->_version;
$smarty_compiler->prefilter_funcs = $this->prefilter_funcs;
$smarty_compiler->postfilter_funcs = $this->postfilter_funcs;
$smarty_compiler->compiler_funcs = $this->compiler_funcs;
$smarty_compiler->security = $this->security;
$smarty_compiler->secure_dir = $this->secure_dir;
$smarty_compiler->security_settings = $this->security_settings;
$smarty_compiler->trusted_dir = $this->trusted_dir;
if ($smarty_compiler->_compile_file ($tpl_file, $template_source, $template_compiled))
{
return true;
}
else
{
$this->_trigger_error_msg ($smarty_compiler->_error_msg);
return false;
}
}
function _smarty_include ($_smarty_include_tpl_file, $_smarty_include_vars)
{
if ($this->debugging)
{
$debug_start_time = $this->_get_microtime ();
$this->_smarty_debug_info[] = array ('type' => 'template', 'filename' => $_smarty_include_tpl_file, 'depth' => ++$this->_inclusion_depth);
$included_tpls_idx = (count ($this->_smarty_debug_info) - 1);
}
$this->_tpl_vars = array_merge ($this->_tpl_vars, $_smarty_include_vars);
extract ($this->_tpl_vars);
array_unshift ($this->_config, $this->_config[0]);
$compile_path = $this->_get_compile_path ($_smarty_include_tpl_file);
$this->_parse_file_path ($this->template_dir, $_smarty_include_tpl_file, $resource_type, $resource_name);
if (($this->security AND $this->_is_trusted ($resource_type, $resource_name)))
{
$_smarty_trusted = true;
$this->security = false;
}
else
{
$_smarty_trusted = false;
}
if ($this->_process_template ($_smarty_include_tpl_file, $compile_path))
{
if ($this->show_info_include)
{
echo (('
<!-- SMARTY_BEGIN: '.$_smarty_include_tpl_file).' -->
');
}
include $compile_path;
if ($this->show_info_include)
{
echo (('
<!-- SMARTY_END: '.$_smarty_include_tpl_file).' -->
');
}
}
if ($_smarty_trusted)
{
$this->security = true;
}
array_shift ($this->_config);
--$this->_inclusion_depth;
if ($this->debugging)
{
$this->_smarty_debug_info[$included_tpls_idx]['exec_time'] = ($this->_get_microtime () - $debug_start_time);
}
if ($this->caching)
{
$this->_cache_info[] = array ('template', $_smarty_include_tpl_file);
}
}
function _config_load ($file, $section, $scope)
{
if ($this->debugging)
{
$debug_start_time = $this->_get_microtime ();
}
if ($this->caching)
{
$this->_cache_info[] = array ('config', $file);
}
if (!isset ($this->_config[0]['files'][$file]))
{
$this->_config[0]['vars'] = array_merge ($this->_config[0]['vars'], $this->_conf_obj->get ($file));
$this->_config[0]['files'][$file] = true;
}
if (($scope == 'parent'))
{
if (((0 < count ($this->_config)) AND !isset ($this->_config[1]['files'][$file])))
{
$this->_config[1]['vars'] = array_merge ($this->_config[1]['vars'], $this->_conf_obj->get ($file));
$this->_config[1]['files'][$file] = true;
}
}
else
{
if (($scope == 'global'))
{
for ($i = 1; ($i < count ($this->_config)); ++$i)
{
if (!isset ($this->_config[$i]['files'][$file]))
{
$this->_config[$i]['vars'] = array_merge ($this->_config[$i]['vars'], $this->_conf_obj->get ($file));
$this->_config[$i]['files'][$file] = true;
continue;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -