PHP本地环境缓存未清理会导致代码修改无效、Composer报错、Artisan命令失效及OPcache逻辑异常;需按顺序清理Laravel配置/通用/视图/路由缓存,同时处理OPcache、APCu、Composer自动加载及Web服务器缓存。

PHP 本地环境的缓存文件不清理,会导致修改代码后页面没变化、composer install 报错、php artisan config:clear 失效,甚至 opcache 缓存旧字节码引发逻辑异常——这不是代码问题,是缓存没清干净。
查清缓存类型再动手
PHP 本地环境(如 XAMPP、MAMP、Docker、或自己编译的 LAMP)可能同时存在多层缓存,每种清理方式和路径都不同:
-
OPcache:PHP 内置字节码缓存,需重启 Web 服务或调用opcache_reset() -
APCu:用户数据缓存,用apcu_clear_cache()或访问apc.php管理页 - Laravel 框架缓存:
storage/framework/cache、bootstrap/cache/config.php等,必须用命令清 - Composer 自动加载缓存:
vendor/composer/autoload_classmap.php和autoload_static.php,改完composer.json后要重生成 - Web 服务器级缓存(如 Apache 的
mod_cache或 Nginx 的fastcgi_cache):本地开发一般不启用,但若手动配过就得删对应目录
Laravel 项目必清的 4 个缓存位置
很多“改了配置不生效”其实只清了 config:clear,漏掉了其他关键缓存。按顺序执行才可靠:
php artisan config:clear php artisan cache:clear php artisan view:clear php artisan route:clear
注意:php artisan optimize:clear(Laravel 9+ 已弃用)不能替代以上四条;storage/framework/cache 目录下如果还有 data 子目录,也建议手动 rm -rf storage/framework/cache/* —— 某些第三方包会绕过 Artisan 直接写这里。
立即学习“PHP免费学习笔记(深入)”;
OPcache 清理不能只靠重启 PHP-FPM
在本地开发中,即使你改了 php.ini 关掉 opcache.enable=0,旧缓存仍可能残留。更稳妥的做法是:
- 确认 OPcache 启用:
php -i | grep opcache查看opcache.enable和opcache.revalidate_freq - 临时清空:在浏览器访问一个含
opcache_reset();的 PHP 文件(如http://localhost/opcache-reset.php),内容仅一行: - 开发时建议设
opcache.revalidate_freq=0(每次请求都校验文件时间戳),避免反复手动清 - Windows 下用 XAMPP/MAMP,重启 Apache 不等于重启 PHP 进程,有时需单独重启 PHP 服务或整个控制面板
Composer autoload 缓存错位导致 Class not found
当你新增类、改命名空间、或切换分支后报 Class XXX not found,大概率是 Composer 的 autoloader 缓存没更新:
- 先运行
composer dump-autoload -o(带优化参数,生成静态映射) - 如果仍报错,检查
vendor/composer/autoload_classmap.php是否包含你的新类路径;没有就说明composer.json的"autoload"配置有误或未执行 dump - 极端情况可删掉整个
vendor/和composer.lock,再composer install—— 别怕慢,本地环境值得花这 20 秒确保干净
真正麻烦的是混合使用了 PSR-4 + classmap + files 多种 autoload 方式,又没跑全量 dump,这时候缓存行为很难预测。











