
Composer install/update 变慢的元凶是 CLI 模式下启用的 Xdebug 扩展;其 opcode 覆盖和函数追踪机制严重拖慢 autoloader 生成与包解压,需彻底卸载而非仅设 xdebug.mode=off。
只要 xdebug 扩展在 PHP CLI 中启用,composer install 或 composer update 就会明显变慢——尤其在解析大量依赖或执行脚本时。这不是错觉,Xdebug 的 opcode 覆盖、函数调用追踪等机制会严重拖慢 Composer 的 autoloader 生成和包解压流程。
运行 php -m | grep xdebug,如果输出 xdebug,说明 CLI 模式已加载;再执行 php -v,若看到 with Xdebug 字样,基本可以确定是它在拖后腿。
composer diagnose 有时会直接提示 “Xdebug is enabled”,但不是所有版本都报time composer install --no-scripts 测两次,差距常达 2–5 倍php -i | grep "Loaded Configuration File" 对应的 php.ini
目标是让 CLI 下的 PHP 不加载 Xdebug,同时保留 Web 环境可用——不能直接删扩展,也不能改全局 php.ini 影响开发调试。
php -d zend_extension= -d xdebug.mode=off composer install 临时禁用(适合单次命令)php.ini(如 php-cli.ini),移除或注释掉 zend_extension=xdebug.so 行,然后设环境变量 PHP_INI_SCAN_DIR="" 并用 php -c /path/to/php-cli.ini composer install
php --ini 查出 CLI 加载的配置目录(通常是 /etc/php/*/cli/conf.d/),把 xdebug.ini 重命名为 xdebug.ini.disabled ——这样 Web 的 fpm 或 apache2 子目录不受影响xdebug.mode?PHP 8.0+ 支持 xdebug.mode=off,但仅关闭功能不等于卸载扩展。Xdebug 仍会参与 opcode 编译、钩住函数调用栈,性能损耗仍在。实测显示,即使 xdebug.mode=off,composer update 仍比完全不加载慢 30%–40%。
真正有效的提速,是让 php -m 输出里彻底不见 xdebug ——这一步常被忽略,也是很多人试了“关 mode”却没提速的原因。