- improvement cache is_file(file_exists) results of loadPlugin() to avoid unnecessary calls during compilation (Issue 201}

This commit is contained in:
Uwe.Tews@googlemail.com
2014-10-14 22:29:58 +00:00
parent d9bc39da57
commit dece63c5d7
2 changed files with 11 additions and 4 deletions

View File

@@ -2,6 +2,7 @@
14.10.2014 14.10.2014
- bugfix any tag placed within "<script language=php>" will throw a security exception to close all thinkable holes - bugfix any tag placed within "<script language=php>" will throw a security exception to close all thinkable holes
- bugfix classmap in root composer.json should start at "libs/..." - bugfix classmap in root composer.json should start at "libs/..."
- improvement cache is_file(file_exists) results of loadPlugin() to avoid unnecessary calls during compilation (Issue 201}
12.10.2014 12.10.2014
- bugfix a comment like "<script{*foo*} language=php>" bypassed $php_handling checking (Thue Kristensen) - bugfix a comment like "<script{*foo*} language=php>" bypassed $php_handling checking (Thue Kristensen)

View File

@@ -662,6 +662,14 @@ class Smarty extends Smarty_Internal_TemplateBase
* @var array * @var array
*/ */
public $merged_templates_func = array(); public $merged_templates_func = array();
/**
* Cache of is_file results of loadPlugin()
*
* @var array
*/
public static $_is_file_cache= array();
/**#@-*/ /**#@-*/
/** /**
@@ -1372,9 +1380,8 @@ class Smarty extends Smarty_Internal_TemplateBase
// if type is "internal", get plugin from sysplugins // if type is "internal", get plugin from sysplugins
if (strtolower($_name_parts[1]) == 'internal') { if (strtolower($_name_parts[1]) == 'internal') {
$file = SMARTY_SYSPLUGINS_DIR . strtolower($plugin_name) . '.php'; $file = SMARTY_SYSPLUGINS_DIR . strtolower($plugin_name) . '.php';
if (file_exists($file)) { if (isset(self::$_is_file_cache[$file]) ? self::$_is_file_cache[$file] : self::$_is_file_cache[$file] = is_file($file)) {
require_once($file); require_once($file);
return $file; return $file;
} else { } else {
return false; return false;
@@ -1392,9 +1399,8 @@ class Smarty extends Smarty_Internal_TemplateBase
$_plugin_dir . strtolower($_plugin_filename), $_plugin_dir . strtolower($_plugin_filename),
); );
foreach ($names as $file) { foreach ($names as $file) {
if (file_exists($file)) { if (isset(self::$_is_file_cache[$file]) ? self::$_is_file_cache[$file] : self::$_is_file_cache[$file] = is_file($file)) {
require_once($file); require_once($file);
return $file; return $file;
} }
if ($this->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_plugin_dir)) { if ($this->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_plugin_dir)) {