Composer可用需ZipArchive类真实可用,而非仅php -m显示zip;必须运行php -r "new ZipArchive();"验证,报错即缺失,Linux下需安装php-zip等对应扩展并确保CLI php.ini启用。

装完 composer -v 能跑,不等于 Composer 真正在 Linux 上可用;卡在 Downloading https://packagist.org/packages.json 或报 Class 'ZipArchive' not found,才是真实问题爆发点。
为什么 curl | php 安装后还是不能用
常见错误现象:执行 composer --version 提示 Permission denied,或直接报 command not found。
-
composer.phar文件必须有执行权限:sudo chmod a+x /usr/local/bin/composer -
/usr/local/bin必须在当前用户的$PATH中;临时验证用export PATH="/usr/local/bin:$PATH",永久生效需写入~/.bashrc(普通用户)或/etc/profile(系统级) - 别用
sudo php composer.phar临时调用——它绕过所有全局配置,后续config -g设置全无效 - Docker 或 systemd 服务里跑 Composer,要确认 PHP CLI 进程实际使用的用户(如
www-data),不是你当前登录用户
composer config -g repo.packagist 配了没反应
根本原因:配置写到了错的用户目录,或被项目级 composer.json 覆盖。
- 运行
whoami确认当前用户,composer config -g写入的是该用户的~/.composer/config.json;sudo composer config -g写进的是/root/.composer/config.json,www-data根本读不到 - 项目根目录下只要存在
composer.json且含"repositories"字段(哪怕只写了{}),全局镜像就完全失效 - 验证是否真写对位置:运行
composer config -g --global-config,它会输出实际生效的配置文件路径 - Composer 2.2+ 支持系统级配置,放
/etc/composer/config.json才算“所有用户都认”,适合 CI 或 Docker 批量部署
阿里云镜像怎么配才不静默退回到官方源
URL 和键名错一个字符,就彻底失效,且不报错、不提示。
- 正确命令是:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/——注意末尾斜杠/不可省略 - 键名必须是
repo.packagist,写成repos.packagist、packagist.org、repo.packagist.org全部无效 - 别加
/packages.json后缀,阿里镜像服务已自动路由所有子路径 - 换源后必须执行
composer clear-cache,否则旧缓存可能仍触发原始域名请求 - 验证是否生效:运行
composer config -g repo.packagist,输出应为{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}
装完还报 Class 'ZipArchive' not found
这不是 Composer 的问题,是 PHP CLI 缺扩展——很多 Linux 发行版默认不启用这个扩展。
- 检查 CLI 环境是否加载:
php -m | grep zip;没输出说明未启用 - Ubuntu/Debian:安装
php-zip包,sudo apt install php-zip - CentOS/RHEL:安装
php-pecl-zip,sudo yum install php-pecl-zip(或dnf) - 如果用宝塔、PHPStudy 等集成环境,需在面板里手动开启 ZIP 扩展,CLI 和 Web 使用的
php.ini可能不同 - 改完后重启 CLI 进程(关掉终端重开),再试
composer install
最常被忽略的一点:全局镜像配置只影响包下载,不解决依赖解析慢的问题;如果你的 composer update 卡在 Loading composer repositories with package information 之后很久才动,大概率是锁文件(composer.lock)和依赖树太复杂,这时候换镜像也没用——得靠 --with-dependencies 或拆分 require-dev 来优化。


















