我搜索了很多这个问题而且我没有找到Prestashop 1.6的正确答案,我已经制作了一个脚本来清除Prestashop缓存,智能缓存, 我从adminPerformances controller获得了代码,
Tools::clearSmartyCache();
Tools::clearXMLCache();
Media::clearCache();
Tools::generateIndex();
我读到它清除了/ cache / smarty / cache中的缓存,但是当执行脚本或单击性能页面中的clear cache时,它不会从该文件夹中删除子文件夹。 任何机构都知道'清除缓存'会影响哪些文件夹/文件。
感谢。
答案 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()
:
这与我上面提出的解决方案基本相同。