【问题标题】:How to clear the cache in Typo3 from an external script?如何从外部脚本清除 Typo3 中的缓存?
【发布时间】:2013-03-12 09:46:27
【问题描述】:

我确实有一个 PHP 脚本,它不是 Typo3 的扩展。现在我想从这个脚本中删除 Typo3 的整个缓存。这怎么可能?

【问题讨论】:

  • 我的客户有一个导入脚本,它导入了几个不能反映到扩展的东西。他不想每次都登录并清除缓存,cron 作业开始。这根本不是解决方案。
  • @Bhumi 很多情况下我们需要这种自动行为。
  • 为什么它是在 PHP 脚本中执行此操作的先决条件?如果您解释您想要实现的目标和原因(例如描述用例),您可能会得到更好的答案。 (虽然这个问题很老,但它仍然会出现在搜索结果中,它可能有助于其他人更新和改进问题和答案)

标签: php caching typo3


【解决方案1】:
  1. 安装TYPO3扩展cleartypo3cache
  2. 在 PhpStorm 4 中创建工具和键盘快捷键以触发 cleartypo3cache
  3. 推送到远程主机时使用无密码公钥身份验证进行 SSH 访问。

安装扩展“cleartypo3cache”并创建BE用户“_cli_cleartypo3cache”并添加以下TSconfig:

options.clearCache.all=1
options.clearCache.pages=1

现在测试缓存是否被清除:

$ cd /path/tp/typo3-site/
$ php typo3/cli_dispatch.phpsh cleartypo3cache all

如果您的网络服务器在本地主机上,那么您很幸运,因为您不需要这个 shell 脚本。如果您的网络服务器位于远程主机上,则需要一个额外的包装脚本。这是因为 PhpStorm 没有为远程主机目录提供环境变量。您必须为包装脚本中的每个项目静态设置此目录:

#!/bin/sh

TYPO3_SITE_PATH="/path/to/typo3-site"
USER="alice"
HOST="example.com"

/usr/bin/ssh $USER@$HOST '/usr/bin/php $TYPO3_SITE_PATH/typo3/cli_dispatch.phpsh cleartypo3cache all'

将此文件保存在您的项目文件目录中到 .idea/clear-typo3-cache.sh 并使其可执行:

$ chmod 755 .idea/clear-typo3-cache.sh

PhpStorm 外部工具 您需要在 PhpStorm 中创建一个“外部工具”才能清除缓存。

  1. 转到 PhpStorm-->设置-->外部工具-->添加...
  2. 为您的工具命名和组,例如“部署”->“清除 TYPO3 缓存”
  3. 取消激活“打开控制台”和“菜单->搜索结果”复选框

远程主机场景

将以下行添加到“程序:”

$ProjectFileDir$/.idea/clear-typo3-cache.sh

本地主机场景

将此行添加到“程序:”

$PhpExecutable$

将此行添加到“参数:”

$ProjectFileDir$/typo3/cli_dispatch.phpsh cleartypo3cache all

您需要在 PhpStorm-->Settings-->PHP 中配置 PHP 解释器才能使用 $PhpExecutable$。或者,您可以使用 /usr/bin/php
(来源:t3node.com

PhpStorm 键盘映射 我建议使用与保存或远程主机上传相同的键绑定:

转到 PhpStorm-->设置-->键盘映射

对于远程主机方案,导航到:主菜单-->工具-->部署-->上传到默认服务器。注意现有的快捷方式。如果你没有一个,创建一个新的(我使用 ALT+SHIFT+U) 对于 localhost 场景,只需使用 Ctrl+S(主菜单-->文件-->全部保存)。

  1. 现在导航到您创建的外部工具(例如,外部工具-->部署->清除 TYPO3 缓存)
  2. 右键单击“添加键盘快捷键”
  3. 在“First Stroke”中创建特定的快捷方式

现在 PhpStorm 会警告您该快捷方式已用于其他命令。没关系,这正是我们想要的。

就是这样。当您在键盘上点击保存或上传时,您的 TYPO3 缓存始终会被清除。

改编自t3node

【讨论】:

  • 这是一个非常详细的答案,但必须有另一种方法,无需安装任何扩展等。例如在 Magento 中,您只需要包含 Mage-Loader,然后您就可以使用必要的方法。
  • 为什么要使用 PhpStorm 来启动缓存刷新?我可以在开发中看到一个可能的用例,但现在还有其他方法和更多内置方法可以做到这一点。这个答案似乎过于复杂,但我可能无法正确理解用例。
【解决方案2】:

我自己找到了解决方案,它实际上非常简单。我查看了 t3lib 文件夹中的 class.t3lib_tcemain.php。那里你有必要的命令来清除缓存。它还会检查您是否启用了缓存框架。如果是这样,您还需要截断其他一些表(以 cachingframework_cache_ 开头)

基本上是:

<?php

 require_once('./typo3conf/localconf.php');

 $conn = mysql_connect($typo_db_host, $typo_db_username, $typo_db_password);
 mysql_select_db($typo_db);

 // Clear Cache here
 mysql_query("TRUNCATE cache_treelist;");
 mysql_query("TRUNCATE cache_pagesection;");
 mysql_query("TRUNCATE cache_hash;");
 mysql_query("TRUNCATE cache_pages;");
 if($handle = opendir('./typo3conf')) {
    while (false !== ($file = readdir($handle))) {
        if(strpos($file, 'temp_CACHED_')!==false) {
            unlink('./typo3conf/'.$file);
        }
    }
    closedir($handle);
 }

?>

【讨论】:

【解决方案3】:

TYPO3 >= 7

从 TYPO3 7 开始,您可以安装 Helmut Hummels Extensiontypo3_console。 然后您可以清除缓存,例如(对于作曲家安装):

./vendor/bin/typo3cms cache:flush

https://extensions.typo3.org/extension/typo3_console/

https://github.com/TYPO3-Console/TYPO3-Console

TYPO3 6.x

首先在你的类中初始化服务

/**
 * @var Tx_Extbase_Service_CacheService
 */
protected $cacheService;

/**
 * @param Tx_Extbase_Service_CacheService $cacheService
 * @return void
 */
public function injectCacheService(Tx_Extbase_Service_CacheService $cacheService) {
    $this->cacheService = $cacheService;
}

在你的函数中调用

$this->cacheService->clearPageCache($pids);

而 $pids 是整数(单页)或整数数组(多页)

见:http://typo3.org/api/typo3cms/class_t_y_p_o3_1_1_c_m_s_1_1_extbase_1_1_service_1_1_cache_service.html

在 TYPO3 自 4.5 以来(我认为)它是一个静态方法,所以你只需调用

Tx_Extbase_Utility_Cache::clearPageCache($pids);

在您的控制器中。

在这里找到它:http://www.phpkode.com/source/p/typo-cms/typo3_src+dummy-4.6.5/typo3/sysext/extbase/Classes/MVC/Controller/ActionController.php

【讨论】:

  • 或者使用@inject注解代替注入方法
  • 我认为您的“更新”答案是 Typo3 v7++ 今天的正确方法。也许您应该将其更新为新答案,而不是更新旧答案。我在诸如 'docker exec -it typo3 php vendor/composer/bin/typo3cms cache:flush' 之类的 ansible 命令中调用它,它按预期工作。
  • 我更改了顺序 - 以关注更新后的答案。
【解决方案4】:

据我所知,在 TYPO3 v.4.x 中,有可能在 FLOW3 中执行此类操作 您没有此类默认 CLI 选项,因此您应该使用或您拥有脚本,或使用诸如 cleartypo3cacheCli Cleaner

我还制作了一个 bash 脚本来清理您的 dB 的缓存表:https://gist.github.com/fedir/5162747

【讨论】:

    【解决方案5】:

    在typo3 6.x extbase 中很简单。

    编辑: clearPageCache 不是静态的,那么你需要创建 CacheService 的对象

    TYPO3\CMS\Extbase\Service\CacheService::clearPageCache(pageUid);

    【讨论】:

      猜你喜欢
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 2017-08-25
      • 1970-01-01
      • 2021-02-05
      相关资源
      最近更新 更多