cache:clear仅清理var/cache/下编译缓存(容器、路由、twig模板等),不清理运行时缓存(如cache.app)或日志;必须指定--env=prod才清生产环境,且需注意权限与残留文件。

直接执行 php bin/console cache:clear 即可清理 Symfony 的配置缓存,但必须注意环境、权限和残留文件这三点,否则看似清了,实际还在用旧缓存。
cache:clear 命令到底清什么
它只清理 var/cache/ 下的编译后 PHP 文件:容器定义(Container*.php)、路由缓存(appDevDebugProjectContainerUrlMatcher.php)、Twig 编译模板(twig/*)等。不碰日志、不碰运行时数据缓存(如 cache.app),也不删 var/log/。
- 加
--env=prod才会清理生产环境缓存;不加默认清dev环境 - 若报错
Command "cache:clear" is not defined,说明你用的是极老版本(php bin/console cache:warmup --env=prod 后手动删var/cache/prod/ - 该命令本身不重启 Web 服务,但清理后首次请求会触发重建,可能略慢
为什么清完还是没生效
常见不是命令没跑,而是缓存“死而复生”:
-
var/cache/目录权限不对:Web 服务器用户(如www-data)无法写入,导致重建失败,悄悄 fallback 到旧缓存 - IDE 或编辑器锁住了
var/cache/dev/下某些文件(尤其 Windows),cache:clear删除不干净 - 用了
opcache.enable_cli=1,CLI 清缓存时 OPcache 仍缓存了旧的Container*.php文件——临时解决:加--no-debug或在 CLI 的 php.ini 里关掉opcache.enable_cli - 某些 Bundle(如 DoctrineMigrationsBundle)会在
cache:clear后自动重建自己的缓存目录,干扰判断
生产环境必须加的两个动作
线上不能只靠 cache:clear:
- 务必配合
php bin/console cache:warmup --env=prod:预生成全部缓存,避免首请求卡顿 - 确认
APP_ENV=prod和APP_DEBUG=false已生效,否则即使清了prod缓存,应用仍可能加载dev配置 - 若用 Nginx + PHP-FPM,检查
fastcgi_cache是否开启——那是 Web 服务器层的缓存,cache:clear完全不感知
真正麻烦的往往不是命令怎么输,而是缓存路径被多个层级(OPcache、文件系统权限、Web 服务器缓存、Bundle 自建缓存)同时 hold 住,漏掉任意一层,都会让你以为命令失效。











