本文目录导读:

在PHP项目中,模板缓存(Template Cache)主要存在于常见的模板引擎(如 Smarty、Twig、Blade 等)以及一些性能优化工具(如 OPcache)中,下面我把开启和清理的方法分开说明,并覆盖主流场景。
主流模板引擎的缓存开启与清理
Smarty(经典PHP模板引擎)
开启缓存:
require_once 'smarty/libs/Smarty.class.php';
$smarty = new Smarty();
// 启用缓存
$smarty->caching = Smarty::CACHING_LIFETIME_CURRENT; // 或 Smarty::CACHING_LIFETIME_SAVED
// 设置缓存目录
$smarty->setCacheDir('/path/to/cache');
// 设置缓存生命周期(秒)
$smarty->cache_lifetime = 3600; // 1小时
清理缓存:
// 清除所有缓存
$smarty->clearAllCache();
// 清除某个模板的缓存(指定模板文件)
$smarty->clearCache('index.tpl');
// 清除带有特定缓存ID的缓存
$smarty->clearCache('article.tpl', $article_id);
Twig(Symfony 默认模板引擎)
开启缓存:
use Twig\Loader\FilesystemLoader;
use Twig\Environment;
$loader = new FilesystemLoader('/path/to/templates');
$twig = new Environment($loader, [
'cache' => '/path/to/cache', // 设置缓存目录(关闭缓存可设为 false)
'auto_reload' => true, // 模板文件变化时自动重新编译
]);
清理缓存:
// 最简单:删除缓存目录全部文件(命令行或代码)
exec('rm -rf /path/to/cache/*');
// 官方无直接 clear() 方法,但可以遍历删除
$cacheDir = '/path/to/cache';
$files = glob($cacheDir . '/*');
foreach ($files as $file) {
if (is_file($file)) {
unlink($file);
}
}
Blade(Laravel 默认模板引擎)
开启缓存:
Blade 默认开启模板编译缓存,无需额外配置,编译后的文件存于 storage/framework/views/。
清理缓存:
# Laravel Artisan 命令 php artisan view:clear
或者在代码中:
// 删除编译后的视图缓存(手动执行)
$files = File::glob(storage_path('framework/views/*'));
foreach ($files as $file) {
if (File::isFile($file)) {
File::delete($file);
}
}
ThinkPHP 6/8(国内常用框架)
开启缓存:
// config/view.php 中设置
'cache' => Env::get('view.cache', true), // 设为 true 或 缓存目录路径
'cache_path' => runtime_path() . 'view/',
'cache_time' => 3600,
清理缓存:
// 命令行
php think clear --cache
// 代码中(删除 view 缓存目录)
\think\facade\Cache::clear('view'); // 需配合驱动配置
// 或直接删除目录
if (is_dir($dir = runtime_path('view'))) {
\think\helper\Str::deleteDir($dir);
}
PHP Opcode 缓存(OPcache)
很多 PHP 项目(特别是面向过程或纯 PHP 模板)通过 OPcache 缓存编译后的 PHP 文件。
开启(php.ini 配置):
opcache.enable=1 opcache.memory_consumption=128 opcache.max_accelerated_files=10000 opcache.revalidate_freq=2 ; 每2秒检查文件是否变更
清理(不重启服务器):
// 代码执行 opcache_reset(); // 清除所有缓存(推荐) opcache_clear(); // 旧版本函数
命令行(CLI):
php -r "opcache_reset();" # 或通过 Web 访问一个执行该函数的脚本
注意: 生产环境建议使用
opcache.validate_timestamps=1并配合opcache.revalidate_freq自动验证,而非手动清缓存。
其他常见场景
使用 file_get_contents 或文件缓存
一些项目自己实现基于文件的模板缓存。
清理方法: 直接删除缓存目录或文件:
function clearFileCache($dir) {
$files = glob($dir . '/*');
foreach ($files as $file) {
if (is_file($file)) {
unlink($file);
}
}
}
clearFileCache('/path/to/custom_cache/');
Redis / Memcached 的模板缓存
如果模板缓存被存储在 Redis 或 Memcached 中,使用对应驱动连接并 flush() 或按 key 删除。
通用清理方案(适用于大多数框架)
-
进入框架缓存目录
- Laravel:
storage/framework/views/ - ThinkPHP:
runtime/view/ - Symfony:
var/cache/ - Yii2:
runtime/cache/
- Laravel:
-
手动删除文件
rm -rf <缓存目录>/*
-
注意事项
- 删除后需确保目录存在且可写(许多框架会自动重建)。
- 生产环境最好通过 CLI 指令或管理后台触发,不要暴露给普通用户。
总结表格
| 引擎/场景 | 开启方式 | 清理方法(代码/命令) |
|---|---|---|
| Smarty | $smarty->caching = 1; |
$smarty->clearAllCache(); |
| Twig | 配置 cache 路径 |
删除缓存目录文件 |
| Blade/Laravel | 默认开启 | php artisan view:clear |
| ThinkPHP | 视图配置 cache => true |
php think clear --cache 或删目录 |
| OPcache | php.ini 开启 | opcache_reset(); |
| 自定义文件缓存 | 自己实现 | 删除缓存文件/目录 |
如果你使用某个具体框架(如 Laravel、ThinkPHP、Yii2 等),或者明确告知使用的模板引擎(如 Smarty、Twig),我可以给出更精确的配置代码示例。