From 7085a0c2f7104a56a7e946c43ba0b5736be5f4e7 Mon Sep 17 00:00:00 2001 From: emkael Date: Tue, 27 Dec 2016 14:47:01 +0100 Subject: * smarty bundled --- ...marty_internal_method_clearcompiledtemplate.php | 120 +++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 lib/smarty3/sysplugins/smarty_internal_method_clearcompiledtemplate.php (limited to 'lib/smarty3/sysplugins/smarty_internal_method_clearcompiledtemplate.php') diff --git a/lib/smarty3/sysplugins/smarty_internal_method_clearcompiledtemplate.php b/lib/smarty3/sysplugins/smarty_internal_method_clearcompiledtemplate.php new file mode 100644 index 0000000..10ee279 --- /dev/null +++ b/lib/smarty3/sysplugins/smarty_internal_method_clearcompiledtemplate.php @@ -0,0 +1,120 @@ +_clearTemplateCache(); + + $_compile_dir = $smarty->getCompileDir(); + if ($_compile_dir == '/') { //We should never want to delete this! + return 0; + } + $_compile_id = isset($compile_id) ? preg_replace('![^\w]+!', '_', $compile_id) : null; + $_dir_sep = $smarty->use_sub_dirs ? DS : '^'; + if (isset($resource_name)) { + $_save_stat = $smarty->caching; + $smarty->caching = false; + /* @var Smarty_Internal_Template $tpl */ + $tpl = new $smarty->template_class($resource_name, $smarty); + $smarty->caching = $_save_stat; + if (!$tpl->source->handler->uncompiled && !$tpl->source->handler->recompiled && $tpl->source->exists) { + $_resource_part_1 = basename(str_replace('^', DS, $tpl->compiled->filepath)); + $_resource_part_1_length = strlen($_resource_part_1); + } else { + return 0; + } + $_resource_part_2 = str_replace('.php', '.cache.php', $_resource_part_1); + $_resource_part_2_length = strlen($_resource_part_2); + } + $_dir = $_compile_dir; + if ($smarty->use_sub_dirs && isset($_compile_id)) { + $_dir .= $_compile_id . $_dir_sep; + } + if (isset($_compile_id)) { + $_compile_id_part = $_compile_dir . $_compile_id . $_dir_sep; + $_compile_id_part_length = strlen($_compile_id_part); + } + $_count = 0; + try { + $_compileDirs = new RecursiveDirectoryIterator($_dir); + // NOTE: UnexpectedValueException thrown for PHP >= 5.3 + } + catch (Exception $e) { + return 0; + } + $_compile = new RecursiveIteratorIterator($_compileDirs, RecursiveIteratorIterator::CHILD_FIRST); + foreach ($_compile as $_file) { + if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) { + continue; + } + + $_filepath = (string) $_file; + + if ($_file->isDir()) { + if (!$_compile->isDot()) { + // delete folder if empty + @rmdir($_file->getPathname()); + } + } else { + $unlink = false; + if ((!isset($_compile_id) || (isset($_filepath[ $_compile_id_part_length ]) && $a = + !strncmp($_filepath, $_compile_id_part, $_compile_id_part_length))) && + (!isset($resource_name) || (isset($_filepath[ $_resource_part_1_length ]) && + substr_compare($_filepath, $_resource_part_1, + - $_resource_part_1_length, $_resource_part_1_length) == + 0) || (isset($_filepath[ $_resource_part_2_length ]) && + substr_compare($_filepath, $_resource_part_2, + - $_resource_part_2_length, + $_resource_part_2_length) == 0)) + ) { + if (isset($exp_time)) { + if (time() - @filemtime($_filepath) >= $exp_time) { + $unlink = true; + } + } else { + $unlink = true; + } + } + + if ($unlink && @unlink($_filepath)) { + $_count ++; + if (function_exists('opcache_invalidate') && strlen(ini_get("opcache.restrict_api")) < 1) { + opcache_invalidate($_filepath, true); + } + } + } + } + return $_count; + } +} \ No newline at end of file -- cgit v1.2.3