如何从外部脚本清除Typo3中的缓存?

问题描述 投票:0回答:5

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

php caching typo3
5个回答
6
投票
  1. 安装 TYPO3 扩展 cleartypo3cache
  2. 在 PhpStorm 4 中创建一个工具和键盘快捷键来触发cleartypo3cache
  3. 推送到远程主机时使用无密码 pubkey 身份验证进行 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) 对于本地主机场景,只需使用 Ctrl+S(主菜单-->文件-->全部保存)。

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

现在 PhpStorm 会警告您该快捷方式已被其他命令使用。很好,这正是我们想要的。

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

改编自t3node


5
投票

我自己找到了解决方案,实际上非常简单。我查看了 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);
 }

?>

4
投票

TYPO3 >= 7

从 TYPO3 7 开始,您可以安装 Helmut Hummels 扩展typo3_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);

在您的控制器中。


1
投票

在 FLOW3 中,有可能做这样的事情,据我所知,TYPO3 v.4.x 你没有这样的默认 CLI 选项,所以你应该使用或你自己的脚本,或使用诸如 cleartypo3cache 之类的扩展Cli Cleaner

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


1
投票

在typo3 6.x extbase中它很简单。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.