Laravel 9清理缓存后控制器与视图仍存缓存问题求助
解决方案排查步骤
检查并清除PHP OPcache
生产环境默认开启OPcache,它会把编译后的PHP字节码存在内存中,哪怕删除源文件,内存里的缓存依然会被执行。- 临时关闭OPcache:找到php.ini或php-fpm.conf,将
opcache.enable=1改为0,保存后重启PHP-FPM。 - 强制刷新OPcache:执行
php -r 'opcache_reset();'(确保PHP CLI配置和Web服务的PHP配置一致,也可通过Web页面调用该函数)。 - 临时实时检查文件变化:在php.ini中设置
opcache.validate_timestamps=1和opcache.revalidate_freq=0(生产环境不建议长期启用,仅用于排查)。
- 临时关闭OPcache:找到php.ini或php-fpm.conf,将
重启PHP-FPM或Web服务器
PHP-FPM进程可能持有旧缓存内容,必须重启服务才能彻底释放:- 重启PHP-FPM:
sudo systemctl restart php-fpm(不同系统命令可能不同,如service php7.4-fpm restart) - 重启Web服务器:
sudo systemctl restart nginx或sudo systemctl restart apache2
- 重启PHP-FPM:
确认代码部署路径是否正确
检查Web服务器配置,确认根目录指向你修改/删除文件的路径:- Nginx:查看配置中的
root项,如root /var/www/html/your-project/public; - Apache:查看
DocumentRoot配置,如DocumentRoot "/var/www/html/your-project/public"
可在服务器创建临时文件test.php,内容为<?php echo getcwd(); ?>,访问该文件确认当前工作目录是否正确。
- Nginx:查看配置中的
检查队列Worker状态(若使用队列)
若控制器逻辑涉及队列任务,旧的队列Worker可能仍运行旧代码,需重启Worker:- 停止队列:
php artisan queue:stop - 重启队列:
php artisan queue:restart或nohup php artisan queue:work &(根据队列驱动调整)
- 停止队列:
执行更彻底的Laravel缓存清理
运行以下命令一次性清除所有Laravel缓存:php artisan optimize:clear排查CDN缓存
若使用CDN服务(如Cloudflare、阿里云CDN等),CDN节点可能缓存了旧页面,需登录CDN后台手动清除缓存。
内容的提问来源于stack exchange,提问作者geldek
相关产品推荐
相关产品推荐

