phpenv 本身无缓存机制,所谓“缓存”实为 php 应用(如 laravel)、opcache、apcu 或 composer 等产生的;清缓存需分层处理:先清 opcache(改 php.ini 中 opcache.revalidate_freq=0 并重启 php-fpm,或访问 opcache-reset.php),再按序执行 laravel 四清命令,接着重生成 composer 自动加载,最后检查 web 服务器与浏览器缓存。

phpEnv 本身不内置缓存机制,所谓“phpEnv 缓存”其实是它所托管的 PHP 应用(如 Laravel、ThinkPHP)或底层组件(OPcache、APCu、Composer)产生的缓存 —— 直接删 phpEnv 安装目录里的文件没用,反而可能破坏环境。
为什么改了代码没生效?先确认是不是 OPcache 没清
phpEnv 常搭配 PHP-FPM 使用,而 OPcache 默认开启且 opcache.revalidate_freq 在 Windows 下常设为 2(秒),导致你改完 PHP 文件后仍执行旧字节码。这不是 phpEnv 的 bug,是 PHP 配置问题。
- 检查是否启用:
php -i | findstr opcache.enable(Windows)或php -i | grep opcache.enable(macOS/Linux) - 开发时最稳妥的配置是:在 php.ini 中设
opcache.revalidate_freq=0,保存后必须重启 php-fpm(不是仅重启 Apache/Nginx) - 临时清空:建一个
opcache-reset.php,内容仅一行<?php opcache_reset(); ?>,浏览器访问一次即可;用完立刻删掉
Laravel 项目在 phpEnv 下缓存清理顺序不能乱
很多人只跑 php artisan config:clear 就以为完事,结果 .env 改了还是读旧值 —— 因为 Laravel 会把配置合并编译进 bootstrap/cache/config.php,而这个文件不会被 config:clear 自动删干净。
- 必须按顺序执行这四条:
php artisan config:clear→php artisan cache:clear→php artisan view:clear→php artisan route:clear - 执行完检查
bootstrap/cache/目录是否为空;若还有packages.php或services.php,手动删掉 -
storage/framework/cache/下若有data/子目录(常见于使用spatie/laravel-backup等包时),也建议rm -rf storage/framework/cache/*(Windows 用rd /s /q storage\framework\cache)
Composer 自动加载缓存要重生成,不是“清”就完事
你在 composer.json 里加了个新类、改了 autoload 规则,只跑 composer dump-autoload 不够 —— 若之前执行过 composer install --optimize-autoloader,旧的 vendor/composer/autoload_classmap.php 和 autoload_static.php 仍会被优先加载。
- 安全做法是:先删
vendor/autoload.php(可选),再执行composer dump-autoload --optimize --classmap-authoritative - 如果报错“Class not found”,大概率是
autoload_static.php缓存了错误路径,删掉它再重生成 - phpEnv 下若用的是旧版 PHP(如 7.4),
--classmap-authoritative可能不支持,换成--optimize即可
别忽略 Web 服务器和浏览器这两层“假缓存”
phpEnv 启动的 Apache 或 Nginx 若启用了 mod_cache 或 fastcgi_cache(极少见,但有人手动配过),会导致返回完全静态的响应,连 PHP 日志都不进 —— 这时候清 Laravel 缓存毫无意义。
- 查 Apache 是否启用:
httpd -M | findstr cache(Windows);Nginx 查配置里是否有fastcgi_cache块 - 本地开发建议直接注释掉相关模块或配置,phpEnv 默认不开启这些
- 浏览器缓存干扰最隐蔽:Ctrl+F5 不一定强制重载 JS/CSS,推荐在资源 URL 后加时间戳,比如
<script src="app.js?v=<?php%20echo%20time();%20?>"></script>,或临时用 Chrome 的 Network 面板勾选 “Disable cache”
真正麻烦的从来不是“怎么清”,而是“清哪几层”和“清完要不要重启”。phpEnv 环境下,OPcache 和 Composer autoload_static 是最容易漏掉、又最影响开发体验的两个点 —— 其他缓存清错了还能试出来,这两个错会让你怀疑人生半小时。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











