问题本质是opcache缓存旧类定义导致Class not found。解决方法:禁用opcache验证是否为此原因;开发环境设opcache.validate_timestamps=1、revalidate_freq=0、enable_cli=1;部署后执行opcache_reset()或重启服务。

这个问题本质是 opcache 缓存了旧的类定义(比如自动加载映射或已编译的 PHP 文件),而 Composer 的 autoloader 已更新(如执行了 composer install 或 composer update),但 opcache 没有刷新,导致 PHP 找不到新路径下的类,报 Class not found。
先快速验证:临时禁用 opcache,看问题是否消失。
opcache.enable=0,然后重启 Web 服务器(如 Apache)或 PHP-FPMphp -d opcache.enable=0 your-script.php
关键配置项要设对,尤其在开发环境:
opcache.validate_timestamps=1(默认开启,必须为 1)opcache.revalidate_freq=0(设为 0 表示每次请求都检查文件修改时间,适合开发)opcache.enable_cli=1(CLI 模式也要启用,否则 php artisan 或 composer dump-autoload 后 CLI 脚本仍可能出错)改完记得重启 PHP 服务(FPM/Apache),仅 reload 不一定生效。
不依赖重启服务,可编程或命令行清理:
opcache_reset();(需确保 opcache.enable 开启且脚本本身没被缓存)php -r "opcache_reset();"
Composer 生成的 vendor/autoload.php 是入口,但它本身很小,真正容易出问题的是它引用的 vendor/composer/autoload_classmap.php 等映射文件——这些文件内容会随依赖变化而重写。
opcache.blacklist_filename,别把 vendor/ 加进去)composer dump-autoload --optimize(或 --classmap-authoritative),减少运行时查找,也降低因映射未更新引发的类缺失风险php -r "opcache_reset();",确保新代码立即生效基本上就这些。核心就是让 opcache 和 Composer 的文件状态保持同步——要么靠自动校验(开发),要么靠主动清理(生产部署)。不复杂但容易忽略。
以上就是如何解决 Composer 和 opcache 缓存不一致导致的 "Class not found" 问题?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号