apcu自动加载器需在composer install/update时显式添加--apcu-autoloader参数才生效,且要求php已启用apcu扩展及apc.enable_cli=1,否则静默降级为普通文件加载。

composer install 时加 --apcu-autoloader 才生效
APCu 自动加载器不是安装完 Composer 就自动启用的,它只在执行 composer install 或 composer update 时,由 Composer 主动生成 APCu 兼容的 autoloader 文件。不加参数,就只是普通文件型 autoload。
- 必须显式加上
--apcu-autoloader(注意是两个短横线) - 如果已存在
vendor/autoload.php,这个参数不会覆盖它——得先删掉再重装,或加--no-scripts避免触发旧脚本干扰 - 该选项仅影响 Composer 生成的 autoload 文件逻辑,不改变你代码里
require或include的行为
PHP 必须装好 APCu 扩展且启用 apc.enable_cli=1
APCu 在 CLI 模式默认是关的,而 Composer 运行在 CLI 下,所以即使扩展已安装,--apcu-autoloader 也会静默退回到普通模式,不报错也不提示。
- 检查是否启用:
php -i | grep apc,确认有apc.enabled => On和apc.enable_cli => On - CLI 配置通常独立于 Web 的
php.ini,常见位置:/etc/php/*/cli/php.ini或$(php --ini | grep "Loaded Configuration File" | cut -d' ' -f4) - 改完记得重启 CLI 环境(比如重新开终端),
php -v不会刷新配置,要用php -i验证
composer dump-autoload 不支持 APCu 模式
很多人想“热更新” autoload 而不重装依赖,但 composer dump-autoload 命令压根不识别 --apcu-autoloader 参数,强行加会报错:Unrecognized option: --apcu-autoloader。
- 只有
install和update支持该参数 - 如果只是改了自己写的类(非 vendor),用
dump-autoload+ PSR-4 映射就够了,没必要强上 APCu - APCu autoloader 本质是把 class map 缓存进共享内存,适合依赖稳定、部署后少变动的场景,不是开发期高频刷新的解决方案
验证是否真在用 APCu autoload
光看命令没报错不等于生效。最直接的办法是看生成的 vendor/autoload.php 文件开头有没有 APCu 相关逻辑。
- 打开它,搜索
apcu_fetch或class_exists+apcu_,有就是启用了 - 运行时可加一句:
var_dump(extension_loaded('apcu') && ini_get('apc.enable_cli'));,确保环境就绪 - 注意:APCu autoload 只加速类加载,不加速 Composer 的依赖解析或脚本执行,别误以为整个
composer install都变快了
apc.enable_cli=1,这是线上最常卡住的地方。










