我有一个 PHP 脚本,它不是 Typo3 的扩展。现在我想从这个脚本中删除整个 Typo3 缓存。这怎么可能?
安装扩展“
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 中创建一个“外部工具”才能清除缓存。
远程主机场景
将以下行添加到“程序:”
$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(主菜单-->文件-->全部保存)。
现在 PhpStorm 会警告您该快捷方式已被其他命令使用。很好,这正是我们想要的。
就是这样。当您在键盘上点击“保存”或“上传”时,您的 TYPO3 缓存始终会被清除。
改编自t3node
我自己找到了解决方案,实际上非常简单。我查看了 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);
}
?>
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 是一个整数(对于单页)或整数数组(多页)
在 TYPO3 中,从 4.5 开始(我认为)它是一个静态方法,所以你只需调用
Tx_Extbase_Utility_Cache::clearPageCache($pids);
在您的控制器中。
在 FLOW3 中,有可能做这样的事情,据我所知,TYPO3 v.4.x 你没有这样的默认 CLI 选项,所以你应该使用或你自己的脚本,或使用诸如 cleartypo3cache 之类的扩展 或 Cli Cleaner。
我还制作了一个 bash 脚本来清理您的 dB 的缓存表:https://gist.github.com/fedir/5162747
在typo3 6.x extbase中它很简单。
编辑:clearPageCache不是静态的,那么你需要创建CacheService的对象
TYPO3\CMS\Extbase\Service\CacheService::clearPageCache(pageUid);