Laravel 5.5+IIS7环境下控制器代码异常缓存问题求助
排查Laravel 5.5在IIS7下的诡异缓存问题
这种缓存问题真的很磨人,尤其是在IIS环境下跑Laravel,我给你梳理几个大概率能解决问题的排查方向:
清除Laravel框架自身的缓存
Laravel的路由、配置这些都会生成缓存文件,哪怕你删除了控制器,缓存里的路由映射还会生效。赶紧在项目根目录下执行这几个命令:php artisan route:clear php artisan config:clear php artisan view:clear php artisan cache:clear检查并重置IIS的缓存与应用池
IIS本身自带输出缓存机制,可能把PHP请求的结果缓存下来了:- 打开IIS管理器,找到你的站点,点击「输出缓存」,检查是否存在针对
.php文件的缓存规则,临时禁用或者清空缓存; - 找到对应站点的应用程序池,右键选择「回收」,彻底重置应用池的运行状态;
- 极端情况下可以重启整个IIS服务,执行命令:
iisreset
- 打开IIS管理器,找到你的站点,点击「输出缓存」,检查是否存在针对
确认控制器文件的残留与命名空间
仔细核对这几点:- 有没有在
app/Http/Controllers之外的目录存在同名的CashHoldingController文件?比如某些自定义的模块目录; - 路由里的控制器是否写全了命名空间?Laravel 5.5默认的命名空间是
App\Http\Controllers,有没有可能你之前的控制器是在其他命名空间下,删除的不是正确的文件?
- 有没有在
排查其他PHP缓存扩展
除了OPCache,还有可能存在其他缓存扩展在作祟,比如APC、XCache。可以创建一个phpinfo.php文件,内容是<?php phpinfo(); ?>,访问后查看所有缓存相关的扩展,确保它们都被禁用,或者执行对应的缓存清空操作。检查是否存在重复路由定义
有没有在其他路由文件(比如routes/api.php或者自定义的路由文件)里也定义了GlCountry/{country}这个路由?Laravel会优先匹配先定义的路由,可能你删除的控制器对应的路由不是正在生效的那个。
内容的提问来源于stack exchange,提问作者Luis felipe De jesus Munoz
相关产品推荐
相关产品推荐

