From 4fd1f7684ec0d66ac0fc0316aa31623360f90d97 Mon Sep 17 00:00:00 2001 From: uwetews Date: Sun, 21 May 2017 16:58:58 +0200 Subject: [PATCH] - bugfix remove deleted files by clear_cache() and clear_compiled_template() from ACP cache if present, add some is_file() checks to avoid possible warnings on filemtime() caused by above functions. https://github.com/smarty-php/smarty/issues/341 --- change_log.txt | 4 +++ libs/Smarty.class.php | 2 +- ..._internal_method_clearcompiledtemplate.php | 6 ++-- ...rty_internal_runtime_cacheresourcefile.php | 36 ++++++++++--------- libs/sysplugins/smarty_template_compiled.php | 7 ++-- 5 files changed, 33 insertions(+), 22 deletions(-) diff --git a/change_log.txt b/change_log.txt index c5f1aad7..0cfcb67f 100644 --- a/change_log.txt +++ b/change_log.txt @@ -2,6 +2,10 @@ 21.5.2017 - bugfix remove special treatment of classes implementing ArrayAccess in {foreach} https://github.com/smarty-php/smarty/issues/332 + - bugfix remove deleted files by clear_cache() and clear_compiled_template() from + ACP cache if present, add some is_file() checks to avoid possible warnings on filemtime() + caused by above functions. + https://github.com/smarty-php/smarty/issues/341 19.5.2017 - change properties $accessMap and $obsoleteProperties from private to protected diff --git a/libs/Smarty.class.php b/libs/Smarty.class.php index fb1d96c7..0440eb62 100644 --- a/libs/Smarty.class.php +++ b/libs/Smarty.class.php @@ -108,7 +108,7 @@ class Smarty extends Smarty_Internal_TemplateBase /** * smarty version */ - const SMARTY_VERSION = '3.1.32-dev-5'; + const SMARTY_VERSION = '3.1.32-dev-6'; /** * define variable scopes diff --git a/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php b/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php index 54c3a36b..0ed9f95b 100644 --- a/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php +++ b/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php @@ -101,7 +101,7 @@ class Smarty_Internal_Method_ClearCompiledTemplate $_resource_part_2_length) == 0)) ) { if (isset($exp_time)) { - if (time() - @filemtime($_filepath) >= $exp_time) { + if (is_file($_filepath) && time() - @filemtime($_filepath) >= $exp_time) { $unlink = true; } } else { @@ -109,12 +109,14 @@ class Smarty_Internal_Method_ClearCompiledTemplate } } - if ($unlink && @unlink($_filepath)) { + if ($unlink && is_file($_filepath) && @unlink($_filepath)) { $_count ++; if (function_exists('opcache_invalidate') && (!function_exists('ini_get') || strlen(ini_get("opcache.restrict_api")) < 1) ) { opcache_invalidate($_filepath, true); + } elseif (function_exists('apc_delete_file')) { + apc_delete_file($_filepath); } } } diff --git a/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php b/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php index 523b7560..38ad41cb 100644 --- a/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php +++ b/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php @@ -111,24 +111,28 @@ class Smarty_Internal_Runtime_CacheResourceFile } } } - // expired ? - if (isset($exp_time)) { - if ($exp_time < 0) { - preg_match('#\'cache_lifetime\' =>\s*(\d*)#', file_get_contents($_file), $match); - if ($_time < (@filemtime($_file) + $match[ 1 ])) { - continue; - } - } else { - if ($_time - @filemtime($_file) < $exp_time) { - continue; + if (is_file($_filepath)) { + // expired ? + if (isset($exp_time)) { + if ($exp_time < 0) { + preg_match('#\'cache_lifetime\' =>\s*(\d*)#', file_get_contents($_filepath), $match); + if ($_time < (@filemtime($_filepath) + $match[ 1 ])) { + continue; + } + } else { + if ($_time - @filemtime($_filepath) < $exp_time) { + continue; + } } } - } - $_count += @unlink($_filepath) ? 1 : 0; - if (function_exists('opcache_invalidate') - && (!function_exists('ini_get') || strlen(ini_get("opcache.restrict_api")) < 1) - ) { - opcache_invalidate($_filepath, true); + $_count += @unlink($_filepath) ? 1 : 0; + if (function_exists('opcache_invalidate') + && (!function_exists('ini_get') || strlen(ini_get("opcache.restrict_api")) < 1) + ) { + opcache_invalidate($_filepath, true); + } elseif (function_exists('apc_delete_file')) { + apc_delete_file($_filepath); + } } } } diff --git a/libs/sysplugins/smarty_template_compiled.php b/libs/sysplugins/smarty_template_compiled.php index 803fd260..1cd4d297 100644 --- a/libs/sysplugins/smarty_template_compiled.php +++ b/libs/sysplugins/smarty_template_compiled.php @@ -173,8 +173,8 @@ class Smarty_Template_Compiled extends Smarty_Template_Resource_Base $this->nocache_hash = null; $this->unifunc = null; // compile locking - $saved_timestamp = $_template->source->handler->recompiled ? false : $this->getTimeStamp(); - if ($saved_timestamp) { + if ($saved_timestamp = (!$_template->source->handler->recompiled && is_file($this->filepath))) { + $saved_timestamp = $this->getTimeStamp(); touch($this->filepath); } // compile locking @@ -185,7 +185,7 @@ class Smarty_Template_Compiled extends Smarty_Template_Resource_Base } catch (Exception $e) { // restore old timestamp in case of error - if ($saved_timestamp) { + if ($saved_timestamp && is_file($this->filepath)) { touch($this->filepath, $saved_timestamp); } unset($_template->compiler); @@ -229,6 +229,7 @@ class Smarty_Template_Compiled extends Smarty_Template_Resource_Base if (function_exists('opcache_invalidate') && (!function_exists('ini_get') || strlen(ini_get("opcache.restrict_api")) < 1) ) { + opcache_invalidate($this->filepath, true); } elseif (function_exists('apc_compile_file')) { apc_compile_file($this->filepath); }