Prestashop清除缓存哪些文件夹受影响

时间:2017-02-08 10:55:18

标签: php caching smarty prestashop prestashop-1.6

我搜索了很多这个问题而且我没有找到Prestashop 1.6的正确答案,我已经制作了一个脚本来清除Prestashop缓存,智能缓存, 我从adminPerformances controller获得了代码,

Tools::clearSmartyCache();
Tools::clearXMLCache();
Media::clearCache();
Tools::generateIndex();

我读到它清除了/ cache / smarty / cache中的缓存,但是当执行脚本或单击性能页面中的clear cache时,它不会从该文件夹中删除子文件夹。 任何机构都知道'清除缓存'会影响哪些文件夹/文件。

感谢。

4 个答案:

答案 0 :(得分:1)

Prestashop使用一个名为Lazy Cache的系统。

以下是clearAllCache classe的clearCache/classes/SmartyCustom方法:

public function clearAllCache($exp_time = null, $type = null)
{
    Db::getInstance()->execute('REPLACE INTO `'._DB_PREFIX_.'smarty_last_flush` (`type`, `last_flush`) VALUES (\'template\', FROM_UNIXTIME('.time().'))');
    return $this->delete_from_lazy_cache(null, null, null);
}

public function clearCache($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null)
{
    return $this->delete_from_lazy_cache($template_name, $cache_id, $compile_id);
}

public function delete_from_lazy_cache($template, $cache_id, $compile_id)
{
    if (!$template) {
        return Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'smarty_lazy_cache`', false);
    }

    $template_md5 = md5($template);
    $sql          = 'DELETE FROM `'._DB_PREFIX_.'smarty_lazy_cache`
                        WHERE template_hash=\''.pSQL($template_md5).'\'';

    if ($cache_id != null) {
        $sql .= ' AND cache_id LIKE "'.pSQL((string)$cache_id).'%"';
    }

    if ($compile_id != null) {
        if (strlen($compile_id) > 32) {
            $compile_id = md5($compile_id);
        }
        $sql .= ' AND compile_id="'.pSQL((string)$compile_id).'"';
    }
    Db::getInstance()->execute($sql, false);
    return Db::getInstance()->Affected_Rows();
}

如您所见,缓存文件在表smarty_lazy_cache下的数据库中编制索引。并且永远不会删除缓存文件,只能从表中取消索引。

答案 1 :(得分:0)

即使没有缓存选项,它仍会在下列文件夹中创建缓存文件:

/cache/smarty/cache
/cache/smarty/compile

我认为Smarty_Internal_Utility::clearCompiledTemplate应删除这些文件。由Tools::clearSmartyCache()

调用

但无论如何,最让我烦恼的是,即使没有缓存选项和强制编译,大多数时候我需要手动清除缓存。通常通过删除我上面提到的文件夹(它更快,特别是在本地虚拟机上)。 这个问题仍然是一个错误"在1.7。

说到1.7,缓存在/app/cache,有一个用于dev,一个用于prod。它甚至缓存了翻译,class_index.php,以及比1.6缓存更多的东西。

答案 2 :(得分:0)

据我们所知,从管理面板清除缓存时受影响的唯一文件夹。

/cache/smarty/compile

如果我们错了,请告诉我们。

答案 3 :(得分:0)

Prestashop 1.7(在1.7.6.1上测试)

  • 广泛提出的解决方案不删除智能模板缓存_PS_ROOT_DIR_ . '/var/cache/' . $env . '/'下的文件)

要正确地重现“管理”>“高级参数”>“性能”中的“清除缓存”按钮的功能,应该是这样的:

include('../../../config/config.inc.php');
include('../../../init.php');


Tools::clearAllCache(); // <---- this is the trick
Tools::clearXMLCache();
Media::clearCache();
Tools::generateIndex();

在其他答案中我缺少的是调用Tools::clearSf2Cache(),在上面的示例中是从Tools::clearAllCache();内部调用的。

Tools::clearSf2Cache()还将删除_PS_ROOT_DIR_ . '/var/cache/' . $env . '/'下的文件

因此,如果您还想删除聪明的模板文件,请回答我的答案

背景/说明:

“清除缓存”按钮调用其中的PerformanceController::clearCacheAction(),调用其中的CacheClearerChain::clear()

  • PrestaShop \ PrestaShop \ Adapter \ Cache \ Clearer \ SymfonyCacheClearer
  • PrestaShop \ PrestaShop \ Adapter \ Cache \ Clearer \ SmartyCacheClearer
  • PrestaShop \ PrestaShop \ Adapter \ Cache \ Clearer \ XmlCacheClearer
  • PrestaShop \ PrestaShop \ Adapter \ Cache \ Clearer \ MediaCacheClearer
  • PrestaShop \ PrestaShop \ Adapter \ Cache \ Clearer \ ClassIndexCacheClearer

这与我上面提出的解决方案基本相同。