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

时间:2013-03-12 09:46:27

标签: php caching typo3

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

6 个答案:

答案 0 :(得分:7)

  1. 安装TYPO3 Extension cleartypo3cache
  2. 在PhpStorm 4中创建工具和键盘快捷键以触发cleartypo3cache
  3. 推送到远程主机时使用无密码pubkey身份验证进行SSH访问。
  4. 安装扩展程序“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
    

    如果您的网络服务器位于localhost上,那么您很幸运,因为您不需要此shell脚本。如果您的Web服务器位于远程主机上,则需要一个额外的包装器脚本。这是因为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. 取消激活复选框“打开控制台”和“菜单 - >搜索结果”
    4. 远程主机方案

      将以下行添加到“Programm:”

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

      Localhost场景

      将此行添加到“Program:”

      $PhpExecutable$
      

      将此行添加到“参数:”

      $ProjectFileDir$/typo3/cli_dispatch.phpsh cleartypo3cache all
      

      您需要在PhpStorm中配置PHP解释器 - >设置 - > PHP使用$ PhpExecutable $。或者你可以使用/ usr / bin / php http://www.t3node.com/fileadmin/user_upload/images/phpstorm-external-tools-typo3-cache.png

      PhpStorm Keymap 我建议您使用与保存或远程主机上传相同的密钥绑定:

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

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

      1. 现在导航到您创建的外部工具(例如外部工具 - >部署 - >清除TYPO3缓存)
      2. 右键单击“添加键盘快捷键”
      3. 在“First Stroke”中创建特定的快捷方式
      4. 现在,PhpStorm将警告您该快捷方式已用于其他命令。这没关系,这正是我们想要的。

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

        改编自t3node

答案 1 :(得分:4)

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

?>

答案 2 :(得分:2)

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

<强> 更新

从TYPO3 7开始,您还可以安装Helmut Hummels Extension typo3_console。 然后你可以清除缓存:

typo3cms cache:flush

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

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

在typo3 6.x extbase中很简单。

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

TYPO3 \ CMS \ Extbase \服务\ CacheService :: clearPageCache(pageUid);

答案 5 :(得分:0)

删除所有缓存形式TYPO3,

您必须TRUNCATE包含缓存数据的数据库表。他们是 : cache_treelist cache_pagesection cache_hash cache_pages

然后你还必须清空错误的&#39; typo3temp&#39;从TYPO3清除主缓存的文件夹。 为此,您可以使用以下链接中给出的外部脚本。

http://typo3techie.blogspot.in/2014/05/cleartemp-clear-typo3temp-for-removing.html