1

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

4

5 回答 5

6
  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 Keymap 我建议使用与保存或远程主机上传相同的键绑定:

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

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

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

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

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

改编自t3node

于 2013-03-12T10:13:09.603 回答
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);
 }

?>
于 2013-03-13T13:12:35.147 回答
4

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

于 2014-04-23T07:10:39.060 回答
1

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

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

于 2013-03-14T13:20:25.397 回答
0

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

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

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

于 2013-11-15T18:22:44.183 回答