我确实有一个 PHP 脚本,它不是 Typo3 的扩展。现在我想从这个脚本中删除 Typo3 的整个缓存。这怎么可能?
5 回答
- 安装 TYPO3 扩展cleartypo3cache
- 在 PhpStorm 4 中创建一个工具和一个键盘快捷键来触发 cleartypo3cache
- 推送到远程主机时使用无密码公钥身份验证的 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 中创建一个“外部工具”才能清除缓存。
- 转到 PhpStorm--> 设置--> 外部工具--> 添加...
- 为您的工具命名和组,例如“部署”->“清除 TYPO3 缓存”
- 停用复选框“打开控制台”和“菜单->搜索结果”
远程主机场景
将以下行添加到“程序:”
$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(主菜单-->文件-->全部保存)。
- 现在导航到您创建的外部工具(例如外部工具-->部署->清除 TYPO3 缓存)
- 右键单击“添加键盘快捷键”
- 在“First Stroke”中创建特定的快捷方式
现在 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 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 是整数(单页)或整数数组(多页)
在 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);