Composer跑不起来主因是PHP环境未就绪:php -v须正常输出版本、php.exe目录须加入系统PATH、openssl/mbstring/curl等扩展必须启用;安装时需手动指定php.exe路径并配置阿里云镜像。

Composer 跑不起来,90% 不是它的问题,而是 PHP 环境没铺平——php -v 能跑、php --ini 能定位配置、php -m 里缺 openssl 或 mbstring,它就直接拒绝工作。
php.exe 找不到或版本报错
Windows 下装完 XAMPP 或 WAMP,composer -v 报 “command not found” 或 “PHP is not recognized”,本质是系统根本不知道 php.exe 在哪。
- 先在命令行运行
php -v,如果失败,说明 PHP CLI 没进 PATH;成功则看版本——Composer 2.5+ 要求 PHP ≥ 8.0,PHP 7.4 项目得用 Composer 2.4 或降级安装器 - XAMPP 用户默认 PHP 路径是
C:\xampp\php,把这个路径加到「系统环境变量 → Path」里(不是用户变量,避免权限干扰) - 加完务必新开一个 CMD/PowerShell 窗口验证,旧窗口不会自动 reload PATH
- 别用 Git Bash 运行
php composer.phar,它的路径解析机制会把C:\xampp\php变成/c/xampp/php,导致 autoload 失败
openssl、mbstring 这些扩展明明开了却还报错
常见现象是 composer install 卡住、报 Could not open input file: composer.phar 或直接退出无提示——这其实是 PHP 加载失败的“假错误”,根源在 php.ini 配置没生效。
- 运行
php --ini看实际加载的是哪个php.ini文件,XAMPP 默认是C:\xampp\php\php.ini - 确认以下四行前面的分号
;已去掉:extension=openssl、extension=mbstring、extension=zip、extension=curl - 改完保存,重启 Apache(XAMPP 控制面板点 Stop 再 Start),再运行
php -m | findstr openssl验证是否真加载了 - Windows 下某些杀毒软件(如 360)会拦截
php_openssl.dll加载,临时禁用试试
composer install 卡在 downloading packages.json
这不是 Composer 坏了,是它默认连 https://packagist.org,国内 DNS 污染 + TLS 握手超时导致响应无法解码,尤其在公司内网或 CI 环境更明显。
立即学习“PHP免费学习笔记(深入)”;
- 先执行
composer diagnose,重点看 “Checking HTTP connectivity to packagist” 是否超时 - 全局换阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 如果项目里已有
composer.json并含repositories字段,它会覆盖全局设置——删掉项目级配置,或改成和全局一致 - 换源后清缓存:
composer clear-cache,否则可能还在用旧的包索引
require 版本写错导致 update 装了一堆不能跑的包
^2.0 允许升到 2.9.9,但若作者在 2.5.0 引入了 PHP 8.1 的 enum,你用 PHP 8.0 就直接 Fatal error;~1.2.3 看似安全,可一旦作者把 1.2.4 当作破坏性更新发,照样崩。
- 生产环境永远用精确版本:
composer require monolog/monolog:2.9.3,不带^或~ - 开发中试新功能,优先用分支名:
composer require vendor/name:dev-main --dev,但要确认对方composer.json里有"autoload-dev"配置 - 别删
composer.lock重装——install是按 lock 文件还原,update才重新解析依赖树,混用等于自毁环境一致性 - PHP 版本锁死也很关键:检查
composer.json顶部的"config": {"platform": {"php": "8.1.10"}},必须和你实际运行的php -v严格一致
最容易被忽略的一点:XAMPP 启动 Apache 时,它用的是 httpd.conf 里的 PHP 模块(LoadModule php_module),而 Composer 运行走的是 CLI 模式(php.exe),两者用的不是同一份 php.ini。所以你在 Apache 页面看到 phpinfo() 显示 openssl 已启用,不代表 Composer 就能用——必须单独验证 CLI 环境。



















