PHP 必须为 Homebrew 安装的 ARM64 原生版本(M1/M2 为 /opt/homebrew/bin/php,Intel 为 /usr/local/bin/php),且需启用 openssl、fileinfo、curl 扩展;Composer 必须通过官方脚本安装并置于对应路径,再配置国内镜像源。

确认 PHP 是否真的可用,不是“有输出”就行
很多人执行 php -v 看到版本号就以为 PHP 搞定了,其实远远不够。macOS 12+ 已彻底移除系统 PHP,你看到的可能是旧版、Rosetta 转译的 x86_64 版本,或路径错乱的残留安装——这些都会让 Composer 启动即报 illegal instruction: 4 或卡在 Resolving dependencies。
- 先运行
which php:必须是/opt/homebrew/bin/php(M1/M2)或/usr/local/bin/php(Intel),否则说明没走 Homebrew 安装的 PHP - 再检查扩展:
php -m | grep -E '^(openssl|fileinfo|curl)$',缺任意一个,Composer 都可能静默失败 - 如果
php -v报错或显示PHP 8.0以下,别修,直接重装:brew install php(Homebrew 会自动装 ARM64 原生版,如 PHP 8.3) - 装完若仍找不到
php,检查~/.zshrc是否含export PATH="/opt/homebrew/bin:$PATH",然后运行source ~/.zshrc
别用 brew install composer,它已被官方弃用
Homebrew 的 composer 包自 2023 年起被标记为 deprecated,现在装大概率遇到三种情况:command not found: composer、Permission denied、或死守在过时的 v2.2.x;M1/M2 上尤其严重——它会把 composer.phar 塞进奇怪路径(比如 ~/.homebrew/bin),且默认绑定系统旧 PHP 或 Intel 架构路径,和你刚装的 brew install php 根本不匹配。
- 官方唯一推荐方式是脚本直装:
curl -sS https://getcomposer.org/installer | php,生成本地composer.phar - M1/M2 用户必须移到
/opt/homebrew/bin/composer(不是/usr/local/bin):sudo mv composer.phar /opt/homebrew/bin/composer - 立刻赋权,缺这步必报错:
sudo chmod +x /opt/homebrew/bin/composer - 验证:
composer --version应输出类似Composer version 2.7.7;若报错,先跑which composer看是否在$PATH里
国内用户不配镜像源,等于没装
默认源 https://packagist.org 在国内访问极不稳定,不是你网络差,是源本身常超时或返回空响应——composer install 十次九卡在 “Resolving dependencies”,甚至直接报 Connection timed out。这不是 Composer 的 bug,是基础设施现实。
- 全局配置阿里云镜像(推荐):
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 也可换中科大源:
composer config -g repo.packagist composer https://mirrors.ustc.edu.cn/composer/ - 配置后可临时验证:
composer show symfony/http-foundation,响应明显变快即生效
遇到 illegal instruction: 4 或卡住,本质不是 Composer 的问题
这个错误看着像 Composer 崩了,其实是底层 PHP 运行时出了架构级错配:你可能在 ARM64 上跑了 x86_64 编译的 openssl 扩展,或 php 自身是 Rosetta 转译的。Composer 本身只是个 .phar 脚本,它不绑架构,但依赖的 PHP 和扩展必须全是 arm64 原生。
- 不要重装 Composer,要重验 PHP:
file $(which php)应显示arm64;php -i | grep 'Configure Command'中应含--build=aarch64-apple-darwin - 检查 CA 证书路径是否正确:
php -r "print_r(openssl_get_cert_locations());",确保default_cert_file存在且可读 - 如果你用过
phpbrew或asdf,务必确认安装时指定了--arch=arm64或用了支持 arm64 的 ref(如ref:8.3.6)
真正麻烦的从来不是下载命令那一行,而是 PHP 运行时是否干净、原生、可信赖。










